python函数
函数
1.内置函数,比如print,len,max等
2.自定义函数
def 函数名():
'写注释,描述信息'
函数体
return #返回值可以是任意类型,不写return,则默认返回None
无参函数 #通常情况不需要return值
def fly():
函数体
有参函数 #通常有参函数都有返回值
def fly(a,b):
函数体
return a+b
调用函数
有参 money=fly(1,2) #定义一个变量来接收return的值
无参 fly() #无参函数不写return,则默认返回None
函数的参数介绍
从形参的角度分析
#位置参数:必须传值的参数
def fly(x,y): print(x) print(y)
#默认参数
def fly(x,y=1): print(x) print(y)
fly(1) #output : 1 1
fly(1,4) #output : 1 4
#默认参数要注意的问题:默认参数必须放到位置参数的后面,def fly(x=1,y)则会报错
#特殊的两种参数
*加参数名 接收所有除了正常传参的位置传参,保存为元祖
**加参数名 接收所有除了正常传参的关键字传参,保存为字典
def fly(x, y=1, *args, **kwargs): print(x) print(y) print(args) print(kwargs) fly(1,y=78,a=1,b=2)
# output:
1
78
()
{'a': 1, 'b': 2}
def fly(x, y=1, *args, **kwargs): print(x) print(y) print(args) print(kwargs) fly(1,20,300,78,w=1,l=2)
# output:
1
20
(300, 78)
{'w': 1, 'l': 2}
从实参的角度分析:
#第一种按位置传参
fly(1,4)
#第二种按关键字传参
fly(x=1,y=2)
fly(y=1,x=2)
#第三种混着用
fly(1,y=2)
fly(x=1,2)
#如果写成fly(1,x=1)则会报错,因为参数只能赋值一次
#这种情况会报错,因为按位置传值必须在按关键字传值前面
#以上两条是混合实参的原则,不能违反
特殊的实参写法
fly(*(12,16,14,15,18),**{"ni":"fuck","sad":"many"})
上面的写法相当于: fly(12,16,14,15,18,ni=fuck,sad=many)
名称空间分为:
内部名称空间
全局名称空间
内置名称空间
搜索顺讯为:内置 全局 内部
闭包:内部函数包含对外部作用域而不是对全局作用域的名字的引用
下面是一个闭包例子:
def f3(): x = 1 def f4(): print(x) return f4 x = 1000 f4 = f3() f4()
# output:1
不管在哪调用内置函数,变量一定是由内向外搜索