python函数的参数

函数的参数

# 函数参数分为两大类:
形式参数  在函数定义阶段括号内填写的参数为形式参数 简称 "形参"
		def func(x,y):
        其中 x ,y 则为函数的形参
实际参数  在函数调用阶段括号内填写的参数为实际参数  简称 "实参"
		func(1,2)
    	12则为函数的实参
'''
形参与实参的关系
	我们可以将形参看成是变量名 实参看成是变量值
		两者在函数调用阶段临时绑定 函数运行结束断开

形参的表现形式只有一种就是变量名
实参的表现形式有很多种 (但是核心就是变量值)

'''


位置参数

# 位置参数
	按照从左到右的顺序依次填入的参数
# 位置形参
	定义函数阶段括号内从左到右依次填写的变量名
# 位置实参
	调用函数阶段括号内从左到右依次填写的变量值
    
    
# 定义一个可以对比大小的函数(掺入两个值 返回较大的)
关键字实参(可以打破位置顺序)
	在函数调用阶段通过 形参名=数据值的形式   指名道姓的传值
    
# 注:位置形参与位置实参是一一对应的
#	位置形参在绑定是多一个不行少一个也不行

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

默认参数

默认参数
	默认形参
    	函数在定义阶段就可以为形参赋值
        	1. 该形参在函数调用阶段如果不给值 则使用默认的
            2. 该形参在函数调用阶段如果给值 则不使用默认的 使用调用时给的
# eg:
定义学员注册功能
	def register(name,age,gender = 'male')
    	print('%s|%s|%s'% (name,age,gender))
    register('jason',123)   # 输出为 jason|123|male
    register('jason2',22,'remale')  # 输出为jason2|22|remale
    
# 位置形参与默认值形参在定义的时候,位置形参必须在默认值形参的前面
# 同样遵循 : 越简单越靠前 越复杂的越靠后

可变长参数

1.函数无论传入多少位置参数都可以正常运行
即为可变长参数
def func(x,y,*a):
    priny(x,y,a)
func()  # 报错
func(1)  # 报错
func(1,2)  # 1 2 ()
func(1,2,3,4,5,6,7,8,9)  # 1 2 (3, 4, 5, 6, 7, 8, 9)
func(1,2)  # 1 2 (3, 4, 5, 6, 7, 8, 9)

# *号在形参中使用  使用接受多余的位置参数 并组织成元组的形式赋值给形参中*后的变量名

2.函数无论传入多少关键字参数都可以正常运行
def index(x, y, **a):
    print(x, y, a)
index()  # 报错 必须有两个必须的位置实参
index(a=1, b=2, c=3, d=4)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
index(y=2, x=1)  # 1 2 {}
index(y=2, x=1, u=222, k=111, l=444)  # 1 2 {'u': 222, 'k': 111, 'l': 444}

# **号在形参中的使用 用于接收多余的关键字参数 并组织成字典的形式赋值为**号后的变量名

3.定义一个函数无论传入多少位置参数和关键字参数都可以正常运行
def func(*a,**b):
    print(a,b)
func()  #  () {}
func(1,2,3,4)  # (1, 2, 3, 4) {}
func(a=1,b=2,c=3)  # () {'a': 1, 'b': 2, 'c': 3}
func(1,2,3,4,a=1,b=2,c=3)  # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}

'''
可变长形参 *与**后的变量名都可以随便定义的
但在python中推荐使用 *args  **kwargs

eg:
def func(*args,**kwargs):
pass

'''

 def index(a, b, c):
     print(a,b,c)
 new_list = [11,22,33]
 index(new_list)  # 不行的 列表看成为一个整体 相当于一个实参
 index(new_list[0],new_list[1],new_list[2])  # 可以


# 如果index形参为*args 列表中有很多元素 如何实现列表中的元素一一传入
def index1(*args):
    print(args)
new_list1 = [11,22,33,44,55,66,77,88,99]
index1(*new_list1)  # index1(11,22,33,44,55,66,77,88,99)
# *号在实参中使用 会将列表,元组内的元素打散一一形成位置参数再一一传值

def index2(**kwargs):
    print(kwargs)
new_dict = {'username':'jason','pwd':123}
index2(**new_dict)   相当于:index2(username = 'jason',pwd = 123)
# 则运行结果为:{'username':'jason','pwd':123}

'''
**号在实参中的使用
	会将字典内的键值对大散成关键字参数传入
'''

函数参数补充

1.命名关键字参数
	def register(name,age,*,sex,height):
        pass
 register('jason',22,'male',183)  # 报错

 register('lili',18,gender='male',height='1.8m') #正确使用
    
 # 故:gender height 在传入实参的时候必须以关键字参数的形式(单独*后的要以关键字参数的形式)

# 了解即可......
posted @   JasonBorn  阅读(628)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示