首页 > 编程语言 >python基础day12 函数的参数

python基础day12 函数的参数

时间:2023-05-26 17:47:32浏览次数:47  
标签:index 函数 python age 参数 def day12 print kevin

函数参数的两大分类

1. 形式参数

在函数定义阶段括号内一次写入的变量名就叫形式参数,简称“形参”

def index(a,b,c,d)
    pass
# a,b,c,d就称之为是函数的形参

2. 实际参数

在函数调用阶段括号内一次传入的变量值就叫实际参数,简称“实参”

index(1,2,3,4)
# 1,2,3,4就称之为是函数的实参

形式参数和实际参数之间的关系:

  把实际参数传递给形式参数,以形参 = 实参的形式传入----->以变量名 = 变量值的形式传入

形参就相当于是变量名,实参就相当于是变量值

形参和实参在函数调用阶段临时绑定,当函数调用完毕,两者断开。

函数的形参形式只有一种,那就是变量名

函数的实参有很多种方式,但是抓住本质:就是数据值。

位置参数和关键字参数(核心)

位置参数:

  在函数括号内依次写入的参数就是位置参数

位置形参:

  在函数定义阶段括号内从左往右依次写入的变量名就是位置形参。

def index(a,b,c,d)
    pass
# a,b,c,d就是位置形参

位置实参:

在函数的调用阶段括号内从左往右依次写入的数据值就是位置实参。

index(1,2,3,4)
# 1,2,3,4就是位置实参

位置传参少一个或多一个都不行

 

关键字实参:

可以打破原来的顺序传递,就是传递参数不再按照顺序传递了。

register(age=18, name='kevin', gender='female')
register('kevin', age=18, 'female') # 不行,位置参数不能跟在关键字的后面
register('kevin', age=18, gender='female') # 行
register(age=18, 'kevin', gender='female') # 不行
register('kevin', name=18, gender='female') # 不行
'''位置参数不能写在关键字的后面,越简单的参数越靠前'''

默认参数

# 前提是默认的形参

在函数定义阶段就给参数赋值了

1. 如果你在函数调用阶段,没有给形参传值,那就是要默认的

2.如果你在函数调用阶段,给形参传值了,就是要你传的值。

# 练习:如果默认值是列表的话,比较特殊:以后所有调用该函数的时候,hobby用的都是一个
def register(name, age, hobby = []):
    hobby.append(age)
    print('%s:%s:%s' % (name, age, hobby))
register('kevin',18,)
register('kevin',19,)
register('kevin',20,)

# 练习2:
m = 200
def func(a, b, c=m)
    print(a,b,c)
m = 400
func(1,2)

'''
两个角度理解:
角度1:
  在函数定义阶段,参数的值就已经固定死了,不能修改
角度2:
  根据变量名和变量值在内存中关系来判断      
'''

可变长参数

# 1. 不管我在调用参数的时候,传入多少个位置参数,都能正常运行
def index(name, password, x, y, *a):
    print(name, password, a, x, y)
    print(a[0])  # 取出来的是元组,可以索引取值
# print(a, b, c, d)
'''*号在形参中的使用:会接收多余的位置参数'''
# index('kevin', 123, 1, 2, 3, 4, 5, 6)  # kevin 123 (1, 2, 3, 4, 5, 6)
# index('kevin', 123)  # kevin 123 ()
# index('kevin', 123, 3, 4, 5, 6, 7, y=2, x=1, )  # kevin 123 () 1 2
# index('kevin', 123, y=2, x=1, 3, 4, 5, 6, 7, )  # kevin 123 () 1 2

# 2. 不管我们在调用函数的时候,传入多少个关键字参数,都能正常运行
'''
**号在形参中的使用:
    接受多余的关键字参数
'''
def index(username, age, gender, hobby, **a):
    print(username, age, gender, a )# kevin 18 {'gender': 'male', 'hobby': 'read', 'a': 1, 'b': 2, 'c': 3}
    # {'hobby': 'read', 'a': 1, 'b': 2, 'c': 3}
# index(1, 2)
# index(a=1,b=2)
# 关键字传参就是指名道姓地传递
# index(b=1, a=1)

d = {'username':'kevin', 'age': 18}
# index(username = 'kevin', age = 18)  # 可行
# index(d.get('username'), d.get('age'))  # 可行
# index(username = d.get('username'), age=d.get('age'))  # 可行
# index(username=d.get('username'), age=d.get('age'),gender='male', hobby='read',a=1,b=2,c=3)
index(username=d.get('username'), age=d.get('age'),gender='male', hobby='read',a=1,b=2,c=3)
# 3. 不管我传入多少个位置参数和关键字参数,函数都能正常运行
def index(*a, **b):
    print(a, b)
# (1, 2, 3)  {'x': 1, 'y': 2, 'z': 3, 'm': 10, 'n': 20}
index(1, 2, 3, 4, k=10, x=1, y=2, z=3, m=10, n=20, )
"""
注意:
    *号和**号后面的变量可以任意起名,遵循变量的命名即可
    在python中,推荐使用
        *args: arguments  位置参数
        **kwargs: keyword arguments 关键字参数
    以后在定义函数的时候,如果我们不知道要传递多少个参数,我们就可以如下定义
        def index(*args, **kwargs):
            pass
"""

# *号和**号在实参中的使用

def index(*args):
    print(args)


# index(1,2,3,4,)

# l = [1, 2, 3, 4, 5, 6, 7, 8, 9, ]
t = (1, 2, 3, 4, 5, 6, 7, 8, 9, )
# index(l[0], l[1], l[2], l[4], l[4],)  # index(1,2,3,4,5)

'''
*在实参中的使用,就是把列表、元组中的一个一个元素打散,然后以位置参数的形式传递
'''
# 针对列表这种里面肯能存放多个元素的时候,我们利用*打散成一个个的元素
# *l 就把列表中的元素,挨个打散
# index(*l)  # (1, 2, 3, 4, 5, 6, 7, 8, 9)-----------> index(1,2,3,4,5,6,7,8,9)
index(*t)  # (1, 2, 3, 4, 5, 6, 7, 8, 9)-----------> index(1,2,3,4,5,6,7,8,9)



"""
**号在实参中的使用:把字典打散成关键字的形式进行传递
"""
def func(**kwargs):
    print(kwargs)  # {'username': 'kevin', 'age': 18, 'gender': 'male'}\
    # print(kwargs.get('username'))
    # print(kwargs.get('age'))
    # print(kwargs.get('gender'))


# func(username='kevin', age=18, gender='male')

d = {'a':1, 'b':2, 'c':3, 'd':4,'e':5}

# func(a=d.get('a'), b=d.get('b'))

# func(a=1,b=2,c=3,d=4,e=5)
func(**d)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

其他参数了解

def register(name,age,*,sex,height): #sex,height为命名关键字参数
    pass

register('lili',18,sex='male',height='1.8m') #正确使用
register('lili',18,'male','1.8m') # TypeError:未使用关键字的形式为sex和height传值
register('lili',18,height='1.8m') # TypeError没有为命名关键字参数height传值。

名称空间

什么是名称空间?

  就是绑定变量名与变量值关系的地方

名称空间的分类:

  1. 内置名称空间

    # python内置的,可以拿来直接使用的,len, print

  2. 全局名称空间

    # 在py文件中,顶格写的变量都是在全局名称空间中

name ='jason' # name就是全局变量,它就在全局名称空间中存着

        if True:
            a = 123  # a也在全局变量,它也在全局名称空间中存储

        for i in range(10): # i 也是全局变量,它也在全局的名称空间中存储
            pass

        def func(): # func 也是全局的,它也在全局的名称空间中存储
            pass        

  3. 局部名称空间

# 在函数中存在的都是局部的
    print(locals())  # {'a': 123, 'b': 'hello'}
    print(globals())

名字的查找顺序

 # len = 'helloworld'

# print(len) # helloworld

name = 'tank'

def index():
    # name = 'kevin'
    print(name)

index()
"""
名字的查找:
    先看你自己再哪个位置
        全局  >>>  内置
    先看你自己再哪个位置
        局部   >>>   全局    >>> 内置
"""

x = 111


def func():
    # x = 222

    def func1():
        # x = 333

        def func2():
            # x = 444

            def func3():
                # x = 555
                print(x)

            func3()

        func2()

    func1()


func()

"""验证变量的查找顺序:局部 >>> 全局 >>> 内置"""

 

  

标签:index,函数,python,age,参数,def,day12,print,kevin
From: https://www.cnblogs.com/zfq132/p/17435393.html

相关文章

  • python中re正则一些用法及其常用正则表达式
    re.findall(pattern,string[,flags])re.findall(pattern,string[,flags])是Pythonre模块中的函数,用于在字符串中查找所有与正则表达式模式匹配的非重叠子字符串,并将它们作为列表返回。具体参数解释如下:pattern:一个正则表达式模式,用于指定要匹配的模式。string:要在其......
  • python flask 启动报错 'utf-8' codec can't decode byte 0xb2 in position 4: invali
    原因:在python下lib文件夹里的socket.py文件中的name=gethostname()代码执行获取本机电脑名称时,遇到中文导致乱码报错。解决方法:    1.将电脑“设备名称”中中文改为英文;    2.修改socket.py代码,如下(参考https://blog.csdn.net/weixin_46342884/article/detail......
  • python基础12
    函数参数的两大分类1.形式参数在函数定义阶段括号内依次写入的变量名就叫形式参数,简称‘形参’2.实际参数在函数调用阶段括号里一次传入的变量值就叫实际参数,简称‘实参’3.形式参数和实际参数之间的关系把实际参数传递给形式参数,以形参=实参的形式传入——一变......
  • 使用 PostMessage 函数来发送带有 std::vector 作为参数的消息
    使用PostMessage函数来发送带有std::vector作为参数的消息,您可以将std::vector的地址封装进LPARAM类型的指针中,并将其传递给PostMessage函数的lParam参数。在接收方,您需要使用reinterpret_cast将LPARAM转换回std::vector的指针,然后使用它来访问std::vector。下......
  • Jmeter函数助手27-urlencode
    urlencode函数用于将字符串进行application/x-www-form-urlencoded编码格式化。StringtoencodeinURLencodedchars:填入字符 1、urlencode函数将字符进行编码格式化,而urldecode函数则是将编码进行解码,两者功能刚好相反。${__urlencode(value="hello"+"word"&name="名......
  • Python - matplotlib 不显示中文 && findfont: Font family ['simsun'] not found
    一.发现问题pythonmatplotlib.plt使用plt.title写标题时,标题显示为方框,无法正常显示中文,遂开始修复之旅。二.尝试解决查询网上大神给出的解决方案是添加全局字体配置:plt.rcParams['font.sans-serif']=['simsun']如果添加后运行代码无findfont:Fontfamily['simsu......
  • Jmeter函数助手28-urldecode
    urldecode函数用于解码application/x-www-form-urlencoded字符串。StringtoencodeinURLencodedchars:填入application/x-www-form-urlencoded字符串 1、urlencode函数将字符进行编码格式化,而urldecode函数则是将编码进行解码,两者功能刚好相反。${__urlencode(value="......
  • 一个远程调用另外站点数据函数
     今天查看木马中发现一个黑客的远程调用数据函数蛮有用的,今天记录下:set_time_limit(0);error_reporting(0);$tr="stristr";$er=$_SERVER;functionhttpGet($url){$ch=curl_init();//设置选项,包括URLcurl_setopt($ch,CURLOPT_URL,$url);curl_setopt($c......
  • 聚合函数
    1.聚合函数介绍什么是聚合函数聚合函数作用于一组数据,并对一组数据返回一个值聚合函数类型AVG()SUM()MAX()MIN()COUNT()1.1AVG和SUM函数可以对数值型数据使用AVG和SUM函数mysql>SELECTAVG(salary),MAX(salary),MIN(salary),SUM(salary)->F......
  • Python默认编码错误SyntaxError: Non-ASCII character '\xe5'之解决方法
    在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息:解决方法:python的默认编码文件是用的ASCII码,你将文件存成了UTF-8!!!(文件中存在中文或者其他语言,就会出现此问题!)解决办法很简单!!!在文件开头加入:# -*- coding: U......