1.函数定义和调用

  • 定义函数的语法格式
    1. def 函数名称(参数):
    2. 函数体代码
    3. return 返回值
    1. #定义函数
    2. def user_info():
    3. print("姓名:张三")
    4. print("性别:男")
    5. print("年龄:18")
    6. #函数调用
    7. user_info()

2.函数参数

  • 缺省参数:函数定义时,设置带有默认值的参数,调用时,缺省参数可以不传入,没传使用默认值,传了实参就使用实参
    ```python def sum(y,x=10): rs=x+y print(“{}+{}={}”.format(x,y,rs))

只传入一个参数y的值

sum(10)

传入缺省参数的实参20

sum(10,20)

  1. - 命名参数:指在调用带有参函数时,通过指定参数名称传入参数的值,并且可以不按照函数定义的参数顺序传入实参
  2. ```python
  3. def sum(y,x):
  4. rs=x+y
  5. print("{}+{}={}".format(x,y,rs))
  6. # 不按照参数定义的顺序,通过指定参数名称传入,指定参数名称必须与定义的形参名称相同
  7. sum(x=10,y=20)
  8. sum(y=20,x=10)
  • 带参函数:函数定义时,可以在小括号内设置函数需要的参数,调用时安装顺序和个数传入
    ```python def user_info(name,sex,age): print(“姓名:”,name) print(“性别:”,sex) print(“年龄:”,age)

调用

name=”张三” sex=”男” age=18 user_info(name,sex,age)

  1. - 不定长参数
  2. - 带有一个*的不定长参数 <br />注:*args接受的任意参数会封装到元组中
  3. ```python
  4. # 计算多个数字和
  5. def any_num_sum(*args):
  6. print("args参数值:",args)
  7. print("args参数类型:",type(args))
  8. rs=0
  9. if len(args)>0:
  10. for arg in args:
  11. rs += arg
  12. print("总和:",rs)
  13. # 调用
  14. any_num_sum(10,20)
  15. any_num_sum(10,20,30,40)
  • 带有两个的不定长参数
    注:*kvargs 接受的参数将封装到字典中 ```python def su(base,
    kvargs): print(“kvargs参数值:”,kvargs) print(“kvargs参数类型:”,type(kvargs)) x=kvargs.get(“x”) y=kvargs.get(“y”) su=base-x-y print(“计算值:”,su)

调用

su(10,x=4,y=5)

  1. - 拆包<br />使用场景:当一个函数设置了不定长参数,想把已存在的元组、列表、字典传入到函数中,并且能够被不定长参数识别,就需要拆包
  2. ```python
  3. # 求数字列表中所有元素和
  4. num_list=[1,2,3,4,5]
  5. #调用any_num_sum函数
  6. any_num_sum(*num_list)
  7. # 求字典中数字计算
  8. su_dict={"x":20,"y":30}
  9. #调su函数
  10. su(100,**su_dict)

3.函数返回值

  1. def x_num(base,**kvargs):
  2. x1=kvargs.get("x1")
  3. x2=kvargs.get("x2")
  4. x_num=base*x1+base*x2
  5. return x_num
  6. def y_num(yy):
  7. if yy >0 and yy <= 10:
  8. return 1
  9. elif yy <= 0:
  10. return 2
  11. elif yy > 10 and yy <100 :
  12. return 3
  13. else:
  14. return 4
  15. def su(base):
  16. su_dict={"x1":10,"x2":20}
  17. x=x_num(base,**su_dict)
  18. yy=base+x
  19. y=y_num(yy)
  20. su=base+x+y
  21. print("计算值:su={},x={},y={}".format(su,x,y))
  22. #调用
  23. su(60)

4.变量作用域

  • 局部变量:只能在某个特定的范围内使用
    ```python def info1():

    局部变量

    name=”张三” age=20 print(“姓名:{},年龄:{}”.format(name.age))

def info2():

局部变量

name=”李四” age=19 print(“姓名:{},年龄:{}”.format(name.age))

调用

info1() info2()

  1. - 全局变量:可以在全局范围内使用
  2. ```python
  3. #全局变量
  4. base=100
  5. def sum1(x):
  6. rs=base+x
  7. print("{}与{}的和{}".format(x,base,rs))
  8. def sum2(y):
  9. rs=base+y
  10. print("{}与{}的和{}".format(y,base,rs))
  11. #调用
  12. sum1(10)
  13. sum2(20)

5.递归函数

  1. 说明:一个函数在其函数体内调用函数自身,这样的函数就是递归函数
  1. # 计算3的阶乘
  2. def factorial(num):
  3. if num > 1:
  4. return num*factorial(num-1)
  5. else:
  6. return num
  7. #调用
  8. factorial(3)

6.匿名函数

  • 匿名函数语法格式

    1. lambda 参数列表:表达式
  • 匿名函数作为普通函数的参数

    1. sum=lambda x,y:x+y
    2. #调用
    3. print(sum(10,20))
  • 将匿名函数赋值给变量,通过变量名调用匿名函数
    ```python def x_y_compute(x,y,func): print(“x={},y={}”.format(x,y)) result=func(x,y) print(“result={}”.format(result))

调用

x_y_compute(10,20,lambda x,y:x+y) x_y_compute(10,20,lambda x,y:x*y)

  1. <a name="JSRWI"></a>
  2. ### 7.闭包
  3. 说明:所谓闭包就是指当一个嵌套函数的内部函数引用了外部函数的变量,外部函数的返回值是内部函数的引用,这种函数的表达方式就是闭包
  4. ```python
  5. # 普通函数,求和
  6. def sum(x,y):
  7. return x+y
  8. sum(10,20)
  9. # 闭包求和
  10. # 1.外部函数
  11. def sum_closure(x):
  12. #2.内部函数
  13. def sum_inner(y):
  14. #3.调用外部函数的变量x
  15. return x+y
  16. #4.外部函数返回值是内部函数的引用
  17. return sum_inner
  18. rs_func=sum_closure(10)
  19. print("rs_func: {}".format(rs_func))
  20. print("rs_func类型: {}".format(type(rs_func)))
  21. #闭包使用
  22. print(rs_func(2))
  1. # 闭包计数器
  2. def counter_w(base=0):
  3. cnt_base=[base]
  4. def counter(step=1):
  5. cnt_base[0]+=step
  6. return cnt_base[0]
  7. return counter
  8. counter=counter_w()
  9. print("当前计数器值:{}".format(counter()))
  10. print("当前计数器值:{}".format(counter()))
  11. print("当前计数器值:{}".format(counter()))

8.装饰器

  • 装饰器介绍:
    就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。
    这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌原函数的函数。

    1. 语法:在被装饰函数前面加 “@装饰器名称”
  • 初步使用

    • 有参函数添加装饰器 ```python

      计算程序执行耗时

      def time(func): def counter(x,y): start_time=time.time() print(“开始时间:”,start_time) func(x,y) end_time=time.time() print(“结束时间:”,end_time) print(“程序运行耗时时间:”,end_time-start_time) return counter

@time # 装饰器 def sum(x,y): time.sleep(5) print(“{}+{}={}”.format(x,y,x+y))

调用

sum(1,2)

  1. - 不定长参数函数添加装饰器
  2. ```python
  3. # 计算程序执行耗时
  4. def time(func):
  5. def counter(*args):
  6. start_time=time.time()
  7. print("开始时间:",start_time)
  8. func(*args)
  9. end_time=time.time()
  10. print("结束时间:",end_time)
  11. print("程序运行耗时时间:",end_time-start_time)
  12. return counter
  13. @time
  14. def sum(x,y):
  15. time.sleep(5)
  16. print("{}+{}={}".format(x,y,x+y))
  17. @time
  18. def multi(x,y,z):
  19. time.sleep(5)
  20. print("{}*{}*{}={}".format(x,y,z,x*y*z))
  21. #调用
  22. sum(10,20)
  23. multi(10,20,30)

  • 当才华还配不上野心,就静下来学习