• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
武纪亨
博客园    首页    新随笔    联系   管理    订阅  订阅
函数的参数

今日内容概要

  • 函数参数的两大分类
  • 位置参数与关键字参数
  • 默认参数
  • 可变长参数(重点)
  • 其他函数参数补充(了解)
  • 名称空间的概念

今日内容详细

函数参数的两大分类

形式参数
	在函数定义阶段括号内所填的参数 简称"形参"
		def func(a,b):
        	pass
        # a和b就是函数func的形参
实际参数
	在函数调用过程中括号内所传入的参数 简称"实参"
    	func(1,2)
        # 数据1和2就是函数func的实参
"""
形参与实参的关系
	我们可以将形参看成是变量名 实参看成是变量值
		两者在函数调用阶段临时绑定 函数运行结束断开
		
形参的表现形式只有一种就是变量名
实参的表现形式有很多种(但是把我核心 就是 数据值)
"""

位置参数

位置参数
	按照从左往右的顺序依次填入的参数
位置形参
	在函数定义阶段括号内按照从左往右的顺序依次填入的变量名
位置实参
	在函数调用阶段括号内按照从左往右的顺序依次传入的数据值
    
# 定义一个可以比较大小的函数(传入两个值 返回较大的)
def size(a,b):
    if a>b:
        print(a)
    else:
        print(b)
        
关键字实参(可以打破位置顺序)
	在函数调用阶段通过形参名=数据值得形式指名道姓的传值
"""
1.位置形参与位置实参在函数调用阶段 按照位置一一对应绑定
2.位置参数在保定的时候多一个不行少一个也不行
"""

'''格式越简单的越靠前 格式越复杂的越靠后'''

默认参数

默认参数
	默认形参
    	在函数的定义阶段就可以给形参赋值了
        	1.该形参在函数调用阶段如果不给值 做使用默认的
            2.该形参在函数调用阶段如果给值 则使用你给的

# 定义学员注册功能            
def register(name, age, salary):
    print('%s|%s|%s' % (name, age, salary))
register('jason', 18, 2000)
register('tom', 28, 1000)
register('tony', 38, 500)

"""
位置形参与默认值形参在定义的时候
	位置形参必须在默认值形参的前面
"""
'''格式越简单的越靠前 格式越复杂的越靠后'''

可变长参数

# 1.函数无论传入多少位置参数都可以正常运行
# 可变长形参
def func(*a):
    print(a)
func()  # ()
func(1)  # (1,)
func(1, 2)  # (1, 2)
func(1, 2, 3, 4, 5, 6)  # (1, 2, 3, 4, 5, 6)

def func(x, y, *a):
    print(x, y, a)
func(1)  # 报错
func(1,2)  # 1 2 ()
func(1, 2, 3, 4, 5, 6)  # 1 2 (3, 4, 5, 6)

"""
*号在形参中的使用
	用于接受多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
"""
#2.函数无论传入多少关键字参数都可以正常运行
def index(**a):
    print(a)
index()  # {}
index(a=1, b=2, c=3)  # {'a': 1, 'b': 2, 'c': 3}
index(y=1, x=2, z=3, u=5, i=7)  # {'y': 1, 'x': 2, 'z': 3, 'u': 5, 'i': 7}

def index(x,y,**a):
    print(x,y,a)
index(y=2,x=1,a=1,b=2)  # 1 2 {'a': 1, 'b': 2}
"""
**号在形参中的使用
	用于接受多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
"""
3.定义一个函数无论传入多少位置参数和关键字都可征程运行
def index(*a,**b):
    print(a,b)
index()  # () {}
index(1, 2, 3, 4, 5)  # (1, 2, 3, 4, 5) {}
index(z=10, p=20, l=30)  # () {'z': 10, 'p': 20, 'l': 30}
index(1, 2, 3, 4, 5, z=10, p=20, l=30)  # (1, 2, 3, 4, 5) {'z': 10, 'p': 20, 'l': 30}
"""
墨守成规
	可变长形参 *与**后面的变量名其实是可以随便定义的
	但是python中推荐使用
		*args
		**kwargs
def index(*args, **kwargs):
	pass
"""

# new_list = [11,22,33]
# index(new_list)  # 报错
# index(new_list, 2, 3)  # [11, 22, 33] 2 3
# index(new_list[0], new_list[1], new_list[2])  # 11 22 33
'''如果index形参是*args 列表里有很多元素 如何实现按照位置一一传入'''
def index(*args):
    print(args)  # ()
index()
new_list = [11, 22, 33, 44, 55, 66]
index(*new_list)  # (11, 22, 33, 44, 55, 66)
"""
*号在实参中的使用
	会将列表、元组内的元素打散成位置参数的形式一一传值
"""

def index(**kwargs):
    print(kwargs)
new_dict = {'name':'jason', 'age':18}
index(**new_dict)  # {'name': 'jason', 'age': 18}
index(name = 'jason', age = 18)  # {'name': 'jason', 'age': 18}
"""
**号在实参中的使用
	会将字典内的键值对打散成关键字参数传入
"""

函数参数补充(了解)

1.命名关键字参数
def register(name,age,*,sex,height):
    pass
register('jason',18, sex='mail',height=183) # 正确使用
"""
sex height在传入实参是必须以关键字参数的形式

ps:该类型的参数几乎不用 也很少碰到
"""

posted on 2021-11-15 22:20  Henrywuovo  阅读(121)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3