普通函数

定义:def 函数名(形参)

调用:函数名(实参)

引用类型传递的是引用,值类型传递的是值

  • 引用类型:数组,元组,列表,字典
  • 值类型:数值,布尔,字符串

    函数的参数:

    默认参数

    ```python def info(name,age=20)

tips:(1)默认参数要写在最后面 (2)在调用方法时如果传递了实参,则以实参为准 (3)如果默认参数是一个列表或字典,对于这种需要注意,默认参数值在函数定义时只计算一次

  1. <a name="uOJkN"></a>
  2. #### 关键参数
  3. def info(name,age)
  4. <a name="ycZYj"></a>
  5. #### 可变参数
  6. ```python
  7. *p:元组
  8. def info(*p)
  9. info(1,2,3)
  10. **p:字典
  11. def info(**p)
  12. info(a=1,b=2,c=3)
  13. def f(c,d,n,m):
  14. print(c)
  15. print(d)
  16. print(m)
  17. print(n)
  18. a=3
  19. b=4
  20. h=[a,b]
  21. k={"m":1,"n":2}
  22. f(*h,**k)

指定参数与返回值类型

  • def func(nums:list, target: int) -> list:

    序列解包:

    1. def info(a,b,c)
    2. info(1,2,3)

    全局变量:

    定义在全局中的变量,整个py文件都可用

    局部变量:

    定义在方法中的变量,只有在同级或下级中使用

    匿名函数:lambda

    函数也是一种数据类型

    1. def run(i,n):
    2. print(i+n)
    3. #函数也是一种数据类型。可以直接赋值给一个变量
    4. a=run
    5. a(1,2)#3
    6. print(type(a))#<class 'function'>
    7. 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

  1. <a name="AkdoU"></a>
  2. # 闭包函数
  3. ```python
  4. def run():
  5. a=1
  6. def fun(num):
  7. print(a)
  8. return a+num
  9. return fun #注意这里返回的是一个函数对象,如果return fun()就是返回的函数调用
  10. var=run()
  11. re_var=var(1)
  12. print(re_var)
  13. '''
  14. 2
  15. 2
  16. '''

装饰器

不带参数

  1. import time
  2. def run_time(func):
  3. def run(*args):
  4. t1=time.time()
  5. func(*args)
  6. t2=time.time()
  7. print('run time:{}'.format(t2-t1))
  8. return run #这里返回需要函数名即可,会自动调用
  9. def is_prime(num):
  10. if num<2:
  11. return False
  12. elif num==2:
  13. return True
  14. else:
  15. for i in range(2,num):
  16. if num%i==0:
  17. return False
  18. else:
  19. return True
  20. @run_time
  21. def prime_num(max_num):
  22. for i in range(2,max_num):
  23. if is_prime(i):
  24. print(i)
  25. prime_num(10000)

带参数

  1. import time
  2. def run_first(*args):
  3. def run_time(func):
  4. def run():
  5. t1 = time.time()
  6. func(*args)
  7. t2 = time.time()
  8. print('run time:{}'.format(t2 - t1))
  9. return run # 这里返回需要函数名即可,会自动调用
  10. return run_time
  11. def is_prime(num):
  12. if num < 2:
  13. return False
  14. elif num == 2:
  15. return True
  16. else:
  17. for i in range(2, num):
  18. if num % i == 0:
  19. return False
  20. else:
  21. return True
  22. @run_first(10000)
  23. def prime_num(max_num):
  24. for i in range(2, max_num):
  25. if is_prime(i):
  26. print(i)
  27. prime_num()

偏函数

偏函数:是将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数后续的参数,除非使用关键字参数。

作用:扩充原定义函数的功能

实例

  1. from functools import partial
  2. def add( n, m ):
  3. return n + m
  4. #第一个参数必须有一个方法对象
  5. fun = partial(add, 1 )
  6. print(add(1, 2 )) # 3
  7. print(fun(2)) # 3

注意:不要以为partial的第二个参数永远是原函数的第一个参数,它也是遵循关键字参数原则的

  1. from functools import partial
  2. fun=partial(int, base=2 )
  3. print(fun('0b1010')) >>>10
  4. fun2=partial( int, '0xa' )
  5. print(fun2(16))