普通函数
定义:def 函数名(形参)
调用:函数名(实参)
引用类型传递的是引用,值类型传递的是值
tips:(1)默认参数要写在最后面 (2)在调用方法时如果传递了实参,则以实参为准 (3)如果默认参数是一个列表或字典,对于这种需要注意,默认参数值在函数定义时只计算一次
<a name="uOJkN"></a>#### 关键参数def info(name,age)<a name="ycZYj"></a>#### 可变参数```python*p:元组def info(*p)info(1,2,3)**p:字典def info(**p)info(a=1,b=2,c=3)def f(c,d,n,m):print(c)print(d)print(m)print(n)a=3b=4h=[a,b]k={"m":1,"n":2}f(*h,**k)
指定参数与返回值类型
- def func(nums:list, target: int) -> list:
序列解包:
def info(a,b,c)info(1,2,3)
全局变量:
定义在全局中的变量,整个py文件都可用局部变量:
定义在方法中的变量,只有在同级或下级中使用匿名函数:lambda
函数也是一种数据类型
def run(i,n):print(i+n)#函数也是一种数据类型。可以直接赋值给一个变量a=runa(1,2)#3print(type(a))#<class 'function'>print(hex(id(a)))#0x15194962e18
将函数作为参数
```python def run(i): return i
def fun(run,n,m): print(run(n)+m)
fun(run,1,2) #3
<a name="AkdoU"></a># 闭包函数```pythondef run():a=1def fun(num):print(a)return a+numreturn fun #注意这里返回的是一个函数对象,如果return fun()就是返回的函数调用var=run()re_var=var(1)print(re_var)'''22'''
装饰器
不带参数
import timedef run_time(func):def run(*args):t1=time.time()func(*args)t2=time.time()print('run time:{}'.format(t2-t1))return run #这里返回需要函数名即可,会自动调用def is_prime(num):if num<2:return Falseelif num==2:return Trueelse:for i in range(2,num):if num%i==0:return Falseelse:return True@run_timedef prime_num(max_num):for i in range(2,max_num):if is_prime(i):print(i)prime_num(10000)
带参数
import timedef run_first(*args):def run_time(func):def run():t1 = time.time()func(*args)t2 = time.time()print('run time:{}'.format(t2 - t1))return run # 这里返回需要函数名即可,会自动调用return run_timedef is_prime(num):if num < 2:return Falseelif num == 2:return Trueelse:for i in range(2, num):if num % i == 0:return Falseelse:return True@run_first(10000)def prime_num(max_num):for i in range(2, max_num):if is_prime(i):print(i)prime_num()
偏函数
偏函数:是将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数后续的参数,除非使用关键字参数。
作用:扩充原定义函数的功能
实例
from functools import partialdef add( n, m ):return n + m#第一个参数必须有一个方法对象fun = partial(add, 1 )print(add(1, 2 )) # 3print(fun(2)) # 3
注意:不要以为partial的第二个参数永远是原函数的第一个参数,它也是遵循关键字参数原则的
from functools import partialfun=partial(int, base=2 )print(fun('0b1010')) >>>10fun2=partial( int, '0xa' )print(fun2(16))
