函数与过程
def func1():
print("in the func1")
return 0
def func2():
print("in the func2")
x = func1()
y = func2()
print('from func1 return is %s' %x)
print('from func2 return is %s' %y)
image
简而言之,过程就是没有返回值的函数,在python中给过程隐式地给过程定义了一个返回值None。
def logger():
time_format = '%Y-%m-%d %X'
time_current = time.strftime(time_format)
with open('file1.text', 'a+') as f:
f.write('%s end action\n' % time_current)
logger()
image
引用过程的三个作用:代码重用;保持一致性;可扩展性
def func1():
print('this is test1')
def func2():
print('this is test2')
return 0
def func3():
print('this is test3')
return 1, 'hello', ['word1', 'word2'], {'word3', 'word4'}
x = func1()
y = func2()
z = func3()
print(x)
print(y)
print(z)
image
由此可见,当没有返回值时,自动赋为None;当给定一个返回值时,返回的就是这个对象;当给定多个返回值时,返回的是所有给定的打包成的一个元组。
return func1
image
当返回给定的是一个函数名时,实际上返回的时该函数在内存中的地址。
而函数之所以要返回值的原因就在于其他程序段的操作需要根据函数的返回值进行不同的操作。
带参数的函数
当调用函数时不指定对应变量,则与形参的顺序一一对应;若指定对应变量即以赋值的格式出现(关键字调用)那么则实参则与形参的顺序无关,但前提是不能一个变量多赋值。
多参量函数(参数个数不确定)
def test(*args): # 变量名随便取
print(args)
test(1,2,4,5,3)
test(*[1,2,3,5,6])
image
最终的结果都是处理成为一个元组形式
def test(x, *args):
print(x)
print(args)
test(1,2,4,5,3)
image
把n个关键字参数,转换成字典的方式
def test(**kwargs):
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
print(kwargs['sex'])
test(name='abc', age=8, sex='F')
image
def test(name, age=18, **kwargs):
print(name)
print(age)
print(kwargs)
test('abc',sex='f', hobby='sport', age=3)
image
def test(name, age=18, *args, **kwargs):
print(name)
print(age)
print(args)
print(kwargs)
test('abc', sex='f', hobby='sport', age=3)
image
args接受n个位置参数,转换成元组的形式;
kwargs接受n个关键字参数,转换成字典的形式。
!!!位置参数不能写在关键字参数之后
局部变量
def change_name(name):
print("before change", name)
name = "ABC" # 局部变量只在函数内部生效,此函数即此变量的作用域
print("after change", name)
name = "abc"
change_name(name)
print(name)
image
如果局部变量想变成全局变量,则在函数内部声明为global类型。但绝大部分条件下不要使用该种方法,会使程序逻辑混乱。
names = ["abc", "123", "qwe"]
def change_name():
names[0] = "ABC"
print("inside func:", names)
change_name()
print(names)
image
除了单个的整型变量及字符串,列表、字典、集合和类都可以在函数内部对全局变量进行修改,除了元组本身就不能修改。
递归函数
必须递归的次数有限,即有结束条件,默认python的递归调用最大次数为999次,原因是为了保护内存。另外,问题规模应呈减少的状态。
高阶函数
def add(a,b,f):
return f(a)+f(b)
res = add(3,-6,abs)
print(res)
运行结果为9。讲白了,高阶函数就类似于函数嵌套。
网友评论