1.可变参数:
# !/usr/bin/pyhton3 # -*-coding:UTF-8-*- def personinfo(arg, *vartuple): print(arg) for var in vartuple: print('我属于不定长参数部分:', var) return # *vartuple 存储元组 print('-----不带可变参数-----') personinfo('小萌') print('-----带两个可变参数-----') personinfo('小萌', '21', 'beijing') print('-----带5个可变参数-----') personinfo('小萌', '21', 'beijing', 'shanghai', 123, 'happy') other = {'城市': '北京', '爱好': '编程'} def perinfo(name, number, **kw): print('名字:', name, '学号:', number, '其他:', kw) perinfo('小智', 100, 城市=other['城市'], 爱好=other['爱好']) perinfo('小智', 100, **other) # **kw存储字典
2.组合参数:
# !/usr/bin/python3
# -*-coding:UTF-8-*-
def exp(p1, p2, df=0, *vart, **kw):
print('p1=', p1, 'p2=', p2, 'df=', df, 'vart=', vart, 'kw=', kw)
exp(1, 2)
exp(1, 2, c=3)# c=3 作为字典传入
exp(1, 2, 3, 'a', 'b')
exp(1, 2, 3, 'abc', x=9)
args = (1, 2, 3, 4)
kw = {'x': 8, 'y': 9}
exp(*args, **kw)
str = (1, 2, 3)
def sum1(*x):
s = 0
for i in x:
s = s + i
print(s)
sum1(*str)# sum(str)此时应定义为def sum1(x):
3.返回函数:
# !/usr/bin/python3
# -*-coding:UTF-8-*-
def sum_late(*args):
def calc_sum():
ax = 0
for n in args:
ax = ax + n
return ax
return calc_sum
print('调用sum_late函数的结果:', sum_late(1, 2, 3, 4))
calc_sum = sum_late(1, 2, 3, 4)
# 将sum_late函数返回的结果赋予calc_sum
print('调用calc_sum函数的结果:', calc_sum())
# 闭包(Closure):内部函数对外部函数的(不是全局作用域)的变量进行引用,
# 内部函数被认为是闭包
# 每次调用sum_late()函数都会返回一个新的函数
f1 = sum_late(1, 2, 3, 4)
f2 = sum_late(1, 2, 3, 4)
print('f1 == f2 的结果为:', f1 == f2)
4.递归函数 :
# !/usr/bin/python3 # -*-coding:UTF-8-*- def fact(n): if n == 1: return 1 return n*fact(n-1) # 使用递归函数要防止栈溢出 print(fact(6))
# 解决递归栈溢出:尾递归优化
# 尾递归:函数返回时调用函数本身,
# 并且return语句不能含表达式,从而使递归本身始终占用一个栈帧
def fact_iter(num, product=1):
if num == 1:
return product
return fact_iter(num-1, num*product)
print(fact_iter(6))
5.匿名函数:
# !/usr/bin/python3 # -*-coding:UTF-8-*- # lambda[arg1[, arg2[, ...argn]]]:experssion # 求一个列表里大于3的元素 # 过程式编程实现 L1 = [1, 2, 3, 4, 5] L2 = [] for i in L1: if i > 3: L2.append(i) print('列表中大于3的元素有:', L2) # 函数式编程实现(使用filter函数) # filter(function, iterable)函数 # 对iterable内元素依次放入函数内判断,为真则返回 def func(x): return x > 3 f_list = filter(func, [1, 2, 3, 4, 5]) print('列表中大于3 的元素有:', [item for item in f_list]) # 匿名函数 print('列表中大于3 的元素有:', [item for item in filter(lambda x:x > 3, [1, 2, 3, 4, 5])])
6.偏函数:
# !/usr/bin/python3
# -*-coding:UTF-8-*-
from functools import partial
def mod(n,m):
return n % m
mod_by_100 = partial(mod, 100)
# 内置某默认参数
print('自定义函数,100对7取余结果为:', mod(100, 7))
print('调用偏函数,100对7取余结果为:', mod_by_100(7))