首页 > 其他分享 >函数的参数

函数的参数

时间:2023-09-06 17:01:33浏览次数:34  
标签:index 函数 形参 参数 print 实参 def

函数的参数

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

函数参数的两大类

形参

函数在'定义阶段'括号中定义的'变量名'就是形式参数,简称'形参'
    	def index(a, b):
            pass
        
        # a,b 就是形参

实参

实际参数
	函数在'调用阶段'括号中写的'变量值'就是实际参数,简称'实参'
    def index(a, b):
        pass
    
    index(1, 2)
    # 1, 2就是函数的实参

形参和实参的关系

	形参和实参的关系
		简单理解为把形参名=实参值-----------》变量名=变量值的形式来看
		形参和实参是在函数调用阶段临时绑定,函数调用结束的时候,两者断开
函数传参形参其实只有一种情况:变量名
但是,实参就好几种形式:变量值、变量名、函数的返回值等,本质:变量值

位置参数

位置参数
	函数在括号中从左往右依次写入的参数就是位置参数
    def index(a, b, c):
        pass
    
位置形参
	在函数定义阶段括号中从左往右依次写入的变量名就是位置形参
    def index(a, b, c):
        pass
    
    # a,b,c就是位置形参

位置实参
	在函数调用阶段括号中从左往右依次传入的变量值就是位置实参
    index(1, 2, 3)
    # 1, 2, 3称为是位置实参
    
"""位置参数的特点:形参和实参是一一对应的"""

# 让你定义一个比较两个数大小的函数
# 1. 定义一个比较两个数大小的函数

def my_max(a, b):
    print(a, b)
    if a > b:
        return a
    return b

# 2. 调用函数
'''位置参数传递,实参个数少一个不行', 实参个数多一个也不行,参数的个数必须要一一对应'''
# res = my_max(10, 2, 3, 4) # 2 10
# res = my_max(10, 2,) # 2 10
# print(res)
# my_max(y=10, x=20, b=1, a=2) # 指名道姓的传递
# res = my_max(b=1, 2) # 不可以,位置参数不能够放在关键字的后面
# res = my_max(2,b=1) # 可以,位置参数不能够放在关键字的后面
# res = my_max(a=1,2) # 不可以,位置参数不能够放在关键字的后面
# res = my_max(2,a=1) # 不可以,位置参数不能够放在关键字的后面
'''位置参数不能够放在关键字参数的前面!!! 越短的越靠前'''

# 关键字实参:可以打破按照顺序传递参数的规则
	特点:严格按照变量名=变量值的形式一一传递
    

默认参数(默认形参)

定义

在函数定义阶段已经给形参赋予了变量值
    1. 如果你在函数定义的时候,给形参赋予值之后,调用函数的时候,实参如果你没有给,就使用默认的
    2. 如果你在函数调用的时候,给了值,就使用你给的值,不在使用默认的
# 练习题1:
'''当默认值是列表的时候,哪么,当多次被调用的时候,多个值会指向同一个固定的地址'''
# def func(name, age, gender, hobby=[]):
#     hobby.append(gender)
#     print(hobby)
#     print("name:%s, age:%s, gender:%s, hobby:%s" % (name, age, gender, hobby))
#
# func('jerry', 18, 'male')
# func('tank', 18, 'female')
# func('tank1', 18, 'male')


# 练习题2:

m = 200
def index(a, b, c=m):
    print(a, b, c)  # 200

m = 400

index(1, 2)
"""
1. 函数在定义阶段,给的默认值直接就定死了,后续不会在改变
2. 根据变量名和变量值在内存中得关系来理解
"""

可变参数(不定长参数):*和**

1. 无论我传入多少个位置参数,函数都能够正常的被调用?

'''
*号在形参中的使用:它会接收多余的位置参数,然后组装成元组的形式赋值给*号后面的变量名
'''
def index(x, y, m, n,  *a):
    print(x, y, m, n, a) # (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)


index(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)


2. 无论我们传入多少个关键字参数,函数都能够被正常的调用?
'''
**号在形参中得使用:会接收多余的关键字参数,并且组装成字典的形式赋值给**号后面的变量名
'''


def index(x, y, q, z, **a):
    # print(a) # {'x': 1, 'y': 2, 'm': 3, 'n': 4, 'z': 5, 'p': 6, 'q': 7}
    print(x, y, a)  # {'m': 3, 'n': 4, 'z': 5, 'p': 6, 'q': 7}
    print(x, y, q, a)  # {'m': 3, 'n': 4, 'z': 5, 'p': 6}


index(x=1, y=2, m=3, n=4, z=5, p=6, q=7)

'''补充:
    *和和**号后面的变量名可以随便叫
    但是嫩:在Python中,推荐使用*args **kwargs
    args:arguments  位置参数
    kwargs: keywords arguments 关键字参数
    
'''


# 3. 无论我传入多少个位置参数和关键字参数,函数都能够被正常调用
def index(a, b, c=1, *args, **kwargs, ):
    print(args)  # (1, 2, 3, 4)
    print(kwargs)  # {'x': 10, 'y': 20, 'z': 30}


index(1, 2, 3, 4, x=10, y=20, z=30)


# 4. 可变长参数(*和**号)在实参中得使用(重要)
### **号在实参中得使用
# def index(x, y, a, b,):
#     print(x, y)

'''
**号在实参中得使用:会把字典打散成关键字的形式当成实参传递
'''
def index(**kwargs):
    print(kwargs)

# index(y=1, x=2, a=3, b=4)
d = {'username':'kevin', 'age':19, 'gender':'male', 'salary':2000, 'sex':'1', 'sex1':2}
# index(y=1, x=2, a=3, b=4)
# index(username='kevin', age=19, gender='male')
# index(username=d['username'], age=d['age'], gender='male', salary=d['salary'])
index(**d) # index(username='kevin', age=19, gender='male', sex=1, sex=2, sex=3)

命名关键字的参数('*',)

# 1. 别人这么写了,你要看懂
# 2. 在源码中会出现这种写法,你看得懂即可
'''
命名关键字传参:在形参中会出现*的用法,如果出现在*号后面的形参,那么,实参传递的时候,必须以关键字的形式传递
'''
def register(name,age,*,sex,height,salary): #sex,height为命名关键字参数
   pass

# register('kevin', 10, 'male', 1.9)
register('kevin', 10, sex='male', height=1.9, salary=2000)

标签:index,函数,形参,参数,print,实参,def
From: https://www.cnblogs.com/zhangfanshixiaobai/p/17682807.html

相关文章

  • C#: 将可空的对象传给非空类型参数
    解决方案使用.Value属性获取可空Guid的实际值:如果你确定可空的Guid对象中包含了值(即非null),可以使用.Value属性来获取实际的Guid值。请确保在使用之前进行检查,以避免null引用异常。Guid?nullableGuid=GetNullableGuid();//假设你有一个可空的Guidif(nul......
  • 无涯教程-JavaScript - SECOND函数
    描述SECOND函数返回时间值的秒数。第二个数字以0(零)到59之间的整数形式给出。语法SECOND(serial_number)争论Argument描述Required/OptionalSerial_number您想找到包含秒数的时间。时间可以输入为-引号内的文本字符串(如"6:45PM")十进制数(如0.78125,代表......
  • kingbase参数ora_input_emptystr_isnull
    KingbaseES为了兼容Oracle,增加了参数ora_input_emptystr_isnull,用于控制''和null的比较。参数说明:#settheinput_emptystr_isnull'sdefaultvalues,validvaluesaretrue(on)orfalse(off)#true(on):oraclestyle.theemptystringasNULL#whentheinputstringis......
  • 你折腾一天都装不上的插件,函数计算部署 Stable Diffusion 都内置了
    在进行函数计算StableDiffusion答疑的过程中,遇到很多同学在装一些插件的过程中遇到了难题,有一些需要安装一些依赖,有一些需要写一些代码,很多时候安装一个插件就能折腾几天,我们收集了很多同学需要的插件,这一次把比较难装的StableDiffusion插件都装好了。可以根据自己的需要自行......
  • 阿里云函数计算FC,连接数据库超时的原因
    使用阿里云函数计算,连接sqlserver数据库一直超时 经过分析是sqlserver版本问题,sql2008r2必须升级到SP3  MicrosoftSQLServer2008R2(SP3)-10.50.6000.34(X64)  Aug19201412:21:34  Copyright(c)MicrosoftCorporation EnterpriseEdition(64-bit......
  • 函数的调用以及显示内容的隐藏
    写程序的终极原则:高内聚,低耦合--->highcohesionlowcoupling设计函数最为重要的原则:单一职责原则(一个函数只做好一件事情)--->高度内聚模块调取隐藏判定:ifname=='main':#__name__是一个隐藏变量,它代表了当前模块(文件)的名字#如果直接通过Python解释器运行example16.p......
  • 格式化消息,参数化替换 {} 占位符
    MessageUtils.javaimportjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;/***消息工具类*/publicclassMessageUtils{publicstaticvoidmain(String[]args){System.out.println(formatMessage("{}是{}年{}月{}日星......
  • tomcat8参数调整&jvm参数
    TOMCAT8设置请求超时时间和最大连接数 minProcessors------------------最小空闲连接线程数,用于提高系统处理性能,默认值为10 maxProcessors-----------------最大连接线程数,即:并发处理的最大请求数,默认值为75 connectionTimeout-----------------请求超时时间,以毫秒为单......
  • 无涯教程-JavaScript - MONTH函数
    描述MONTH函数返回由序列号表示的日期的月份。月份以整数形式给出,范围从1(一月)到12(十二月)。语法MONTH(serial_number)争论Argument描述Required/OptionalSerial_number您要查找的月份的日期。应该使用DATE函数或其他公式或函数的输出输入日期。如果将日期作为......
  • 无涯教程-JavaScript - ISOWEEKNUM函数
    描述ISOWEEKNUM函数返回给定日期的年份的ISO周编号。语法ISOWEEKNUM(date)争论Argument描述Required/OptionalDateDateisthedate-timecodeusedbyExcelfordateandtimecalculation.RequiredNotesMicrosoftExcel将日期存储为连续数字,因此可以在计算......