函数三要素:
    名字 参数 返回值
    区别:
    image.png

    1. #函数三要素:名字 参数 返回值
    2. #dockstring 函数体内的说明
    3. def bmi(height,weight):
    4. '''
    5. 计算BMI的值:
    6. 公式:身高/(体重*体重).
    7. 身高是以米为单位,如1.78
    8. 体重是以千克为单位,如70千克
    9. 函数返回计算好的BMI值,保留两位小数
    10. '''
    11. val = weight/(height*height)
    12. return round(val,2)
    13. #print(bmi(1.75,70))
    14. #print(bmi.__doc__)
    15. #1.位置参数
    16. #基于位置的参数 - 适合少参数情况
    17. def calc(a,b,c):
    18. print(a*a + 2*b + c)
    19. #calc(3,5,8)
    20. #2.关键词参数
    21. #可能出现位置传错情况 - 指定位置
    22. #calc(c=8,a=3,b=5)
    23. #3.混搭 位置参数在前,先位置,后关键词
    24. #calc(3,c=8,b=5)
    25. #4.强制关键词参数
    26. # * 之后的参数必须用关键词传参数
    27. #强制传参可以和位置传参混搭
    28. def c2(d,*,a,b,c):
    29. print(a*a + 2*b + c)
    30. #c2(3,5,8)
    31. c2(0,a=3,b=5,c=8)
    32. #5.默认参数
    33. #非默认参数不能放在默认参数之后
    34. #先非默认参数,再默认参数
    35. def c3(a,b=5,c=8):
    36. print(a*a + 2*b + c)
    37. c3(3)
    38. #6.可变(位置)参数
    39. #先固定参数,再可变参数
    40. # *变量名 表示可变参数
    41. #元组前加* 对其开包,将其破开
    42. def hello(msg,*names):
    43. print('Hello',names,msg)
    44. #hello('新年好','zhangsan','lisi','wangwu','zhaoliu')
    45. #7.可变(关键词)参数
    46. def hello2(msg,**names):
    47. print('老大是',names['BOSS'],msg)
    48. print('老二是',names['BOSS2'],msg)
    49. hello2('新年好',BOSS='张三',BOSS2='李四',GUARD='王五')
    50. #8.进一步混搭
    51. #顺序必须是:必选参数、默认参数、可变位置参数、命名关键词参数、可变位置参数
    52. def f(a,b,c,d,*args,e,f,**kwargs):
    53. print(a,b,c,d,e,f)
    54. print(args)
    55. print(kwargs)
    56. f(1,2,3,4,5,99,e=6,f=7,x=8,y=9,z=10)
    57. #9.强制位置参数 - 只能通过位置传参,不能通过参数传参
    58. # / 之前的为强制位置参数
    59. def f2(a,b,/,c,d,*,e,f,**kwargs):
    60. print(a,b,c,d,e,f)
    61. f2(3,4,5,6,e=7,f=8,z=9,w=10)
    62. #10.函数调用 - 开包列表和元组
    63. #开包
    64. def hello3(msg,name1,name2,name3):
    65. print('Hello',name1,name2,name3,msg)
    66. names = ['张三','李四','王五']
    67. hello3('你好',names[0],names[1],names[2])
    68. hello3('你好',*names)
    69. #开包-打包-开包
    70. def hello4(msg,*names):
    71. print('hello',*names,msg)
    72. name_param = ['张三','李四','王五']
    73. hello4('你好',*name_param)
    74. #11.函数调用-开包字典
    75. # ** 开包
    76. def hello5(msg,**names):
    77. print('老大是',names['BOSS'],msg)
    78. print('老二是',names['BOSS2'],msg)
    79. data = {'BOSS':'张三','BOSS2':'李四','GUARD':'王五'}
    80. hello5('新年好',BOSS=data['BOSS'],BOSS2=data['BOSS2'],GUARD=data['GUARD'])
    81. hello5('新年好',**data)
    1. #1.可以有返回值,也可以没有返回none
    2. #2.返回值通过return返回
    3. #3.遇到return,函数执行结束
    4. #4.返回多个值,
    5. def send_flower(flower_num):
    6. if(flower_num < 10):
    7. return '今天有时,以后再联系'
    8. if(flower_num % 14 == 0):
    9. return '今天有时间吗?晚上一起吃个饭'
    10. else:
    11. return '谢谢你!'
    12. #print(send_flower(28))
    13. #传值VS引用
    14. #基本类型是传值,不影响原来的数值
    15. #复杂类型传引用,修改原来数值
    16. heights = [1.67,1.78,1.59]
    17. def predict(heights):
    18. for index,h in enumerate(heights):
    19. heights[index] = h + 0.3
    20. return heights
    21. predict_heights = predict(heights)
    22. #print(heights)
    23. #函数可以被赋值,可以被传递
    24. #匿名函数
    25. #对于一行可以写出来的,一次性使用的函数
    26. #1、没有名称的一行的函数
    27. #2.不用def,也可以被复制
    28. numbers = [2,4,5,6,7,3]
    29. def process(numbers,calc):
    30. for n in numbers:
    31. print(calc(n),end=' ')
    32. print( )
    33. # def add5(n):
    34. # return(n+5)
    35. # def double(n):
    36. # return(n+n)
    37. process(numbers,lambda x:x+5)
    38. process(numbers,lambda x:x*5)
    39. #global 全局变量