python基础12

函数参数的两大分类

1.形式参数

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

2.实际参数

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

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

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

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

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

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

实参有很多方式,但抓住本质:数据值

位置参数和关键字参数

位置参数

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

位置形参

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

位置实参

  在函数调用阶段括号里从左往右一次写入变量值就是位置实参

1 #写一个注册学员信息功能
2 def register(name,age,gender)
3     print(‘%s:%s:%s’%(name,age,gender))
4 
5 #位置传参必须一一对应

关键字实参

  可以打破原来的循序传递,就是传递参数不在按照顺序传递

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'))

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

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

可变长参数

1.不管我在调用函数的时候,传入多少个位值参数,都能正常运行

def index(name,password,x,y,*a):

  print(name,password,a,x,y)

*号在形参中的使用:会接收多余的位置参数

2.不管我们在调用函数的时候,传入多少个关键字参数,都能正常运行

**号在形参中使用:接受多余的关键字参数

def index(username,age,gender,hobby,**a)

  print(username,age,gender,a)

3.不管我传入多少个位置参数和关键字参数,函数都能正常运行

def index(*a,**b)

  print(a,b)

4.注意:

  *号和**号后面的变量可以任意取名,遵循变量原则即可

  zaipython中,推荐使用*args:arguments 位置参数

  **kwags:keyword arguments 关键字参数

  以后在定义函数时候,如果我们不知道要传递多少个参数,我们就可以如下定义

   def index(*args,**kwargs):

      pass

5.*在实参中的使用,就是把列表、元组中一个一个元素打散,然后以位置参数的形式传递

  针对列表这种里面肯能存放多个元素的时候,我们利用*打散成一个个的元素

6.**号在实参中的使用:把字典打散成关键字的形式进行传递

名称空间

什么是名称空间?

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

名称空间的分类:

  1.内置名称空间

    Python解释器内置的,可以直接拿来使用的

  2.全局名称空间

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

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

  3.局部名称空间

    在函数中存在的都是局部的

    print(locals())

    print(globals())

名字查找顺序  

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

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

posted @   Py玩家  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示