#1.python 函数的参数传递:
不可变类型:传不可变对象(‘’值传递‘’),如 整数、字符串、元组。
可变类型:传可变对象(‘’引用传递‘’),如 列表,字典。
#2.关键字参数
函数调用使用关键字参数来确定传入的参数值,使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。 如
def fun(month,day):
print(str(month)+"/"+str(day))
fun(day=1,month=12)
3.不定长参数
若需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,,声明时不会命名。
def function([参数,],*arg)
或 def function([参数,],**arg)
或 def function([参数,],*arg,**arg)
- 加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组。也可以不向函数传递未命名的变量。
def fcn(b,*a):
print(b)
for i in a:
print(i)
fcn(1,32,43)
输出:1
32
43
- 加了两个星号 ** 的参数会以字典的形式导入。
def fcn(b,**arg):
print(b)
for u,v in arg.items():
print(u,v,sep=":")fcn(1,c=32,d=43)
输出:1
c:32
d:43
def fcn(b,*a,**arg,):
print(b)
for u,v in arg.items():
print(u,v,sep=":")
for i in a:
print(i)
fcn(1,2,3,c=32,d=43
结果
1
c:32
d:43
2
3
#三.global 和 nonlocal关键字
改变变量作用域
a=3
def fcn():
global a
print(a)
def fcn():
nonlocal a
a=1
return
print(a)
#四.函数重载可通过默认参数来实现
如
def __init__(nane=None,age=None):
#五.函数名可做函数的参数
如
def fx(a,f):
print(f(a))
fx(-1,abs)
def lf(a,f):
for i in f:
print(i(a))
lf(-2.3,[abs,int])
#六.匿名函数
lambda 参数表:表达式
用法:
1将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
add=lambda x,y:x+y,则add函数执行加法
2将lambda函数作为参数传递给其他函数。
- 如若函数f(x)有参数,当按按钮要执行f(x)
可写b=Button(root,…,command=lambda:f(x) 如
f- ilter函数。此时lambda函数用于指定过滤列表元素的条件。
filter(lambda x: x % 3 == 0, [1, 2, 3]) 结果是[3]。 - map函数。例如map(lambda x: x+1, [1, 2,3]) 结果[2, 3, 4]。
#七.map函数
map(function,list1/tuple1<,list2/tuple2>) 若函数只有一个参数,只需一个列表/元祖。若有两个参数,需要两个列表/元祖 如
a=map(abs,[-1,3,-3])
a=map(min,(1,3,3),(43,1,5))
map函数返回的是迭代器,若要打印值。
a1=list(a)
print(a1)
#错误: print(list(a))第一次会返回结果,但指针已经变了位置,第二次就无法获得想要的结果了
#八 sorted 函数
sorted(iterable[, cmp[, key[, reverse]]])
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
L=[(‘b’,2),(‘a’,1),(‘c’,3),(‘d’,4)]
a= sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数 [(‘a’, 1), (‘b’, 2), (‘c’, 3), (‘d’, 4)]
b=sorted(L, key=lambda x:x[1]) # 利用key [(‘a’, 1), (‘b’, 2), (‘c’, 3), (‘d’, 4)]
#九 reduce()函数
reduce()函数接收的参数和 map(function,list)类似。但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,函数f每次的计算结果与list中下个元素一同作为函数f的参数。
list=[1, 3, 5, 7, 9]
functiontools.reduce(lambda x,y:x+y,list)
先计算头两个元素:f(1, 3),结果为4;
再把结果和第3个元素计算:f(4, 5),结果为9;
再把结果和第4个元素计算:f(9, 7),结果为16;
再把结果和第5个元素计算:f(16, 9),结果为25;
list=[1, 3, 5, 7, 9]
functiontools.reduce(lambda x,y:x/y,list)#连除
十:真正随机数
from random import random,seed
from time import time
seed(time())
for i in range(1,10000):
x = random()