普通函数
定义: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=3
b=4
h=[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=run
a(1,2)#3
print(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>
# 闭包函数
```python
def run():
a=1
def fun(num):
print(a)
return a+num
return fun #注意这里返回的是一个函数对象,如果return fun()就是返回的函数调用
var=run()
re_var=var(1)
print(re_var)
'''
2
2
'''
装饰器
不带参数
import time
def 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 False
elif num==2:
return True
else:
for i in range(2,num):
if num%i==0:
return False
else:
return True
@run_time
def prime_num(max_num):
for i in range(2,max_num):
if is_prime(i):
print(i)
prime_num(10000)
带参数
import time
def 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_time
def is_prime(num):
if num < 2:
return False
elif num == 2:
return True
else:
for i in range(2, num):
if num % i == 0:
return False
else:
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 partial
def add( n, m ):
return n + m
#第一个参数必须有一个方法对象
fun = partial(add, 1 )
print(add(1, 2 )) # 3
print(fun(2)) # 3
注意:不要以为partial的第二个参数永远是原函数的第一个参数,它也是遵循关键字参数原则的
from functools import partial
fun=partial(int, base=2 )
print(fun('0b1010')) >>>10
fun2=partial( int, '0xa' )
print(fun2(16))