第五章:函数
1.创建函数
def hello(name):
return ‘hello,’+name
2.记录函数
def hello(name): ’this is hello function’
return ‘hello,’+name
>>hello.__doc__
输出: ’this is hello function’
3.参数
def hello(name):
name=’zq’
return ‘hello,’+name
>>x=’zqq’
>>hello(x)
>>输出x:zqq
函数不能改变外部的值,因为函数的参数作用域是局部的,但是想要改变外部的值的时候怎么办?可以将外部的值放到列表中,这样函数中的变量和外部的列表是同一个引用,就可实现,相反如果不想改变列表的值就应该对原列表复制,然后再进行操作。
4.关键字参数和默认值
def hello1(name,talk):
return talk+’,’+name
可以在调用函数的时候提供参数的名字:
hello1(name=’zq’,talk=’hello’)
输出:hello,zq
有些函数带默认值的:
def hello2(talk,name=’zq’):
return talk+’,’+name
此时,调用函数的时候可以用或者不用提供关键字参数
hello2(talk=‘hello’,)
输出:hello,zq
如果想改变name的值,就给name赋值就可.
5.收集参数
def pri(*paras):
print(paras)
在参数前面加了一个星号,最后会将结果用元组打印出来,收集剩余位置的所有参数(没有等号的),如果没有参数,则是一个空元组。
def pri(**paras):
print(paras)
在参数前面加了两个星号,最后会将结果用字典的形式打印出来,实际上也是收集剩余位置的关键字参数(如:x=1带有等号的,不带等号的用*),如果没有关键字参数,则为空字典
6.反转过程
def add(x,y):
return x+y
>>add(*(1,2))
输出:3
在调用方法的时候,在元组的前面加上星号,将元组转换为参数,与上例相反
def add(x,y):
return x+y
p={‘a’:1,’b’:1}
>>add(**p)
输出:2
7.全局变量
访问全局变量的值:globals[‘变量名’]
访问全局变量的字典:vars
声明全局变量:global
x=1
y=1
def chan(x):
global x
x+=1
return globals()[‘y’]+x
输出:3
8.函数中的函数
def no1():
x=1
def no2():
nonlocal x
x+=1
return no2
注意其中的nonlocal可以访问外部作用域,但不是全局作用域。调用no2()的时候x的值就会加1
9.递归
简单来说就是在函数中自己调用自己,但是要注意无限循环
def func():
func()
上面就是递归,但是是一个无限循环的递归
<!--EndFragment-->