1,掌握局部变量的特点(定义方式,作用范围)
在函数内部定义, 只在函数内部起作用
2,掌握全局变量的特点(定义方式,作用范围)
在函数外部定义,在函数内部外部都起作用
3,掌握函数中返回多个值
Def fn():
Xxxxx
Return x1, x2, x3
一个函数中可以有多个return语句,但是只要有一个return语句被执行到,那么这个函数就会结束了,因此后面的return没有什么用处。
4,(重点)return返回值详解
1、return必须写在自定义函数内部
2、一个自定义函数,如果没有写return,或者写了return后并没有写返回值,都表示最终这个函数返回了None
3、函数可以返回多个值,返回值类型也可以是任意,但默认是元组
return shang, yushu # return可以同时返回多个值,用逗号隔开,默认的数据类型是元组,
但是也可以返回其他的数据类型:
return [shang, yushu]
return {"shang": shang, "yushu": yushu}
return "hello"
5,参数详解
1、位置参数
def fn(a, b):
print("%s的年龄是%s" % (a, b))
fn("python", 27) # 位置参数, 实参和形参一一对应
不能调换位置
2、默认参数,缺省参数
def fn(a, b=27): # 默认参数,又叫缺省参数, b如果接受不到实参,就使用默认的这个27
print("%s的年龄是%s" % (a, b))
fn("python", 28)
3、关键字参数
def fn(a, b):
print("%s的年龄是%s" % (a, b))
fn(a="python", b=27) # 关键字参数 即使调换位置也能正常输出。
4、注意:
书写格式的要求:
形参:普通参数写在默认参数前面
实参:位置参数写在关键字参数前面
5、不定长参数:
*args 专门用来接收位置参数,作为元组,在函数内部访问args,就是访问这个元组,每一个位置参数作为元组的元素
**kwargs 专门来接收关键字参数,作为字典,在函数内部访问kwargs,就是访问这个字典,每一个关键字参数作为字典的元素
def sum_nums_3(a, *args, b=22, c=33, **kwargs):
print(a) # 100
print(b) # 1
print(c) # 2
print(args) # (200, 300, 400, 500, 600, 700)
print(kwargs) # {"mm": 800, "nn":900}
sum_nums_3(100, 200, 300, 400, 500, 600, 700, b=1, c=2, mm=800, nn=900)
6,(重点)引用
a = 10 # 让符号a指向10的这个内存地址
b = a # 让符号b指向a所指向的那个内存地址
id() 用来获取某个数据的内存地址
一般用它查看两个变量的指向是不是一样,
如果两个变量的id相同,说明这两个变量的指向一样
如果两个变量的id不相同,说明这两个变量的指向不一样
7,掌握元组的拆包
a, b = (10, 20)
8,掌握交换2个变量的值
a,b = b, a
9,掌握函数的默认(缺省)参数的使用
调用函数时,缺省参数的值如果没有传入,则取默认值。
def fn(a, b=27)
注意:在形参中默认有值的参数,称之为缺省参数。
带有默认值的参数一定要位于参数列表的最后面。
10,掌握函数的可变(不定长)参数的使用
Def fn(*args, **kwargs):
Print(args)
Print(kwargs)
11,global的使用
a = 10
def fn():
global a # 声明下边修改的这个a是全局变量a
a = 100
print(a) # 如果只是访问这个变量(跟全局变量同名),访问到的是全局,如果是对这个a进行重新赋值 即a = 100, 这个变量就是局部变量,如果在函数内部想要修改全局变量a,需要加global a声明
什么时候用global
1、在函数内部修改全局变量的时候
2、在函数内部定义全局变量的时候
12,递归函数
一个自定义函数,里面调用了函数本身,称这个调用是函数的递归调用,称这个函数为递归函数
def fn(num):
"""这个函数是来求num的阶乘"""
if num == 1:
return 1
else:
ret = num * fn(num-1)
return ret
print(fn(4))
网友评论