翼度科技»论坛 编程开发 python 查看内容

函数的参数

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
函数的参数


  • 函数参数的两大分类
  • 函数的默认参数和位置参数
  • 可变参数(不定长参数):*和**
  • 命名关键字的参数('*',)
函数参数的两大类

形参
  1. 函数在'定义阶段'括号中定义的'变量名'就是形式参数,简称'形参'
  2.             def index(a, b):
  3.             pass
  4.         
  5.         # a,b 就是形参
复制代码
实参
  1. 实际参数
  2.         函数在'调用阶段'括号中写的'变量值'就是实际参数,简称'实参'
  3.     def index(a, b):
  4.         pass
  5.    
  6.     index(1, 2)
  7.     # 1, 2就是函数的实参
复制代码
形参和实参的关系
  1.         形参和实参的关系
  2.                 简单理解为把形参名=实参值-----------》变量名=变量值的形式来看
  3.                 形参和实参是在函数调用阶段临时绑定,函数调用结束的时候,两者断开
  4. 函数传参形参其实只有一种情况:变量名
  5. 但是,实参就好几种形式:变量值、变量名、函数的返回值等,本质:变量值
复制代码
位置参数
  1. 位置参数
  2.         函数在括号中从左往右依次写入的参数就是位置参数
  3.     def index(a, b, c):
  4.         pass
  5.    
  6. 位置形参
  7.         在函数定义阶段括号中从左往右依次写入的变量名就是位置形参
  8.     def index(a, b, c):
  9.         pass
  10.    
  11.     # a,b,c就是位置形参
  12. 位置实参
  13.         在函数调用阶段括号中从左往右依次传入的变量值就是位置实参
  14.     index(1, 2, 3)
  15.     # 1, 2, 3称为是位置实参
  16.    
  17. """位置参数的特点:形参和实参是一一对应的"""
  18. # 让你定义一个比较两个数大小的函数
  19. # 1. 定义一个比较两个数大小的函数
  20. def my_max(a, b):
  21.     print(a, b)
  22.     if a > b:
  23.         return a
  24.     return b
  25. # 2. 调用函数
  26. '''位置参数传递,实参个数少一个不行', 实参个数多一个也不行,参数的个数必须要一一对应'''
  27. # res = my_max(10, 2, 3, 4) # 2 10
  28. # res = my_max(10, 2,) # 2 10
  29. # print(res)
  30. # my_max(y=10, x=20, b=1, a=2) # 指名道姓的传递
  31. # res = my_max(b=1, 2) # 不可以,位置参数不能够放在关键字的后面
  32. # res = my_max(2,b=1) # 可以,位置参数不能够放在关键字的后面
  33. # res = my_max(a=1,2) # 不可以,位置参数不能够放在关键字的后面
  34. # res = my_max(2,a=1) # 不可以,位置参数不能够放在关键字的后面
  35. '''位置参数不能够放在关键字参数的前面!!! 越短的越靠前'''
  36. # 关键字实参:可以打破按照顺序传递参数的规则
  37.         特点:严格按照变量名=变量值的形式一一传递
  38.    
复制代码
默认参数(默认形参)

定义
  1. 在函数定义阶段已经给形参赋予了变量值
  2.     1. 如果你在函数定义的时候,给形参赋予值之后,调用函数的时候,实参如果你没有给,就使用默认的
  3.     2. 如果你在函数调用的时候,给了值,就使用你给的值,不在使用默认的
复制代码
  1. # 练习题1:
  2. '''当默认值是列表的时候,哪么,当多次被调用的时候,多个值会指向同一个固定的地址'''
  3. # def func(name, age, gender, hobby=[]):
  4. #     hobby.append(gender)
  5. #     print(hobby)
  6. #     print("name:%s, age:%s, gender:%s, hobby:%s" % (name, age, gender, hobby))
  7. #
  8. # func('jerry', 18, 'male')
  9. # func('tank', 18, 'female')
  10. # func('tank1', 18, 'male')
  11. # 练习题2:
  12. m = 200
  13. def index(a, b, c=m):
  14.     print(a, b, c)  # 200
  15. m = 400
  16. index(1, 2)
  17. """
  18. 1. 函数在定义阶段,给的默认值直接就定死了,后续不会在改变
  19. 2. 根据变量名和变量值在内存中得关系来理解
  20. """
复制代码
可变参数(不定长参数):*和**
  1. 1. 无论我传入多少个位置参数,函数都能够正常的被调用?
  2. '''
  3. *号在形参中的使用:它会接收多余的位置参数,然后组装成元组的形式赋值给*号后面的变量名
  4. '''
  5. def index(x, y, m, n,  *a):
  6.     print(x, y, m, n, a) # (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
  7. index(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
  8. 2. 无论我们传入多少个关键字参数,函数都能够被正常的调用?
  9. '''
  10. **号在形参中得使用:会接收多余的关键字参数,并且组装成字典的形式赋值给**号后面的变量名
  11. '''
  12. def index(x, y, q, z, **a):
  13.     # print(a) # {'x': 1, 'y': 2, 'm': 3, 'n': 4, 'z': 5, 'p': 6, 'q': 7}
  14.     print(x, y, a)  # {'m': 3, 'n': 4, 'z': 5, 'p': 6, 'q': 7}
  15.     print(x, y, q, a)  # {'m': 3, 'n': 4, 'z': 5, 'p': 6}
  16. index(x=1, y=2, m=3, n=4, z=5, p=6, q=7)
  17. '''补充:
  18.     *和和**号后面的变量名可以随便叫
  19.     但是嫩:在Python中,推荐使用*args **kwargs
  20.     args:arguments  位置参数
  21.     kwargs: keywords arguments 关键字参数
  22.    
  23. '''
  24. # 3. 无论我传入多少个位置参数和关键字参数,函数都能够被正常调用
  25. def index(a, b, c=1, *args, **kwargs, ):
  26.     print(args)  # (1, 2, 3, 4)
  27.     print(kwargs)  # {'x': 10, 'y': 20, 'z': 30}
  28. index(1, 2, 3, 4, x=10, y=20, z=30)
  29. # 4. 可变长参数(*和**号)在实参中得使用(重要)
  30. ### **号在实参中得使用
  31. # def index(x, y, a, b,):
  32. #     print(x, y)
  33. '''
  34. **号在实参中得使用:会把字典打散成关键字的形式当成实参传递
  35. '''
  36. def index(**kwargs):
  37.     print(kwargs)
  38. # index(y=1, x=2, a=3, b=4)
  39. d = {'username':'kevin', 'age':19, 'gender':'male', 'salary':2000, 'sex':'1', 'sex1':2}
  40. # index(y=1, x=2, a=3, b=4)
  41. # index(username='kevin', age=19, gender='male')
  42. # index(username=d['username'], age=d['age'], gender='male', salary=d['salary'])
  43. index(**d) # index(username='kevin', age=19, gender='male', sex=1, sex=2, sex=3)
复制代码
命名关键字的参数('*',)
  1. # 1. 别人这么写了,你要看懂
  2. # 2. 在源码中会出现这种写法,你看得懂即可
  3. '''
  4. 命名关键字传参:在形参中会出现*的用法,如果出现在*号后面的形参,那么,实参传递的时候,必须以关键字的形式传递
  5. '''
  6. def register(name,age,*,sex,height,salary): #sex,height为命名关键字参数
  7.    pass
  8. # register('kevin', 10, 'male', 1.9)
  9. register('kevin', 10, sex='male', height=1.9, salary=2000)
复制代码
来源:https://www.cnblogs.com/zhangfanshixiaobai/p/17682807.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具