首页 > 其他分享 >参数与名称空间

参数与名称空间

时间:2022-10-10 20:01:54浏览次数:60  
标签:形参 print 参数 名称 func 空间 实参 def

位置参数

位置形参:指的是定义函数时括号定义的参数,即变量名

​ 在定义函数时,按照从左到右的顺序依次定义的参数,称为位置形参

特性:位置形参必须被传值,多一个不行少一个也不行

位置实参:指的是在调用函数时括号内传入的值,即变量名

​ 在调用函数时,按照从左往右的顺序依次传入的值,称为位置实参

特点:与形参一一对应,顺序乱了,实参赋值也会乱

img

'''在调用函数时,实参的值会传给形参,这就是一个变量的赋值操作'''

默认形参和关键字实参

  1. 默认参数(形参):在定义函数时,就可以被赋值的参数,称为默认形参

  • 在定义阶段已经被赋值,意味着在调用阶段就可以不用传值
  • 默认参数必须跟在位置形参的后面,否则就会报错
  • 默认参数的值只在定义阶段被赋值一次就固定死了,定义之后改变没有影响
  • 默认参数的值应该设置成不可变类型

(1)、在定义阶段已经被赋值,意味着在调用阶段就可以不用传值

def foo(x,y,z=3):
    print(x,y,z)
 
foo(1,2)
 
#返回值
1 2 3

(2)、默认形参跟在位置形参的前面,报错

ef foo(y=1,x):
    pass
 
#报错
SyntaxError: non-default argument follows default argument

(3)、默认参数的值只在定义阶段被赋值一次就固定死了,定义之后改变没有影响

m=10
def func(x,y=m):
    print(x)
    print(y)
m=1111111
func(1)
 
#返回值
1
10

(4)、默认参数的值应该设置成不可变类型

#这种方式列表的值每次都会发生不可预料的变化,不建议这么做
def func(name,hobby,l=[]):
    l.append(hobby)
    print(name,l)
 
func('egon','read')
func('alex','play')
 
#返回值
egon ['read']
alex ['read', 'play']
 
#正确姿势
def func(name,hobby,l=None):
    if l is None:
        l=[]
    l.append(hobby)
    print(name,l)
 
func('egon','read')
func('alex','play')
 
#返回值
egon ['read']
alex ['play']
  1. 关键字实参:在调用函数时,按照key=value的形式定义的实参,称为关键字实参
特点:可以完全打乱顺序,但仍然能指名道姓的为指定的参数传值
def foo(x,y,z):
    print(x,y,z)
 
foo(x=1,y=2,z=3)
 
#返回值
1 2 3

可变长参数

可变长参数:指的是在调用函数时,传入的参数个数可以不固定
调用函数时,传值的方式无非两种,一种是位置实参,另一种是关键字实参,因此形参也必须得有两种解决方法,以此来分别接收溢出来的位置实参(*)与关键字实参(**)

形参之*

形参中的会溢出来的位置实参全部接收,然后存储元组的形式,然后把元组赋值给后的参数。需要注意的是:*后的参数名约定俗称成为args。

def sum_self(*args):
    res = 0
    for num in args:
        res += num
    return res


res = sum_self(1, 2, 3, 4)
print(res)
10

形参之**

形参中的会将溢出的关键字形参全部接收,然后存储字典的形式,然后把字典赋值给后的参数。需要注意的是:**后的参数名约定俗称为kwargs。

def func(**kwargw):
    print(kwargw)


func(a=5)
{'a': 5}

实参之*

实参中的*,会将后产生的值循环取出,打散成位置实参。以后但凡碰到实参中带 *的,它就是位置实参,应该马上打散成位置实参去看。

def func(x, y, z, *args):
    print(x, y, z, args)


func(1, *(1, 2), 3, 4)
1 1 2 (3, 4)
1
2
3
4
5
6

实参之**

实参中的**,会将后参数的值循环取出,打散成关键字实参。以后但凡碰到实参中带 * *的,它就是关键字实参,应该马上打散成关键字实参去看。

def func(x, y, z, **kwargs):
    print(x, y, z, kwargs)


func(1, 3, 4, **{'a': 1, 'b': 2})
1 3 4 {'a': 1, 'b': 2}

名称空间

名称空间就是用来存储变量名与数据值绑定关系的地方(我们也可以简单的理解为就是存储变量名的地方)
名称空间 存放名字 存货周期
内置名称空间 存放的是python解释器内置的名字 python解释器启动后产生,关闭后回收
全局名称空间 不是函数内定义,也不是内置的,剩下的都是全局名称空间的名字 执行python文件时产生,python文件运行完成后回收
局部名称空间 在调用函数时,运行函数体代码的过程中生产的函数内的名字 在调用函数时生产,在函数用完毕后回收

名字查找顺序

涉及到名字查找,要搞清楚自己在哪个空间

  1. 当我们在局部名称空间中的时候

    ​ 局部名称空间 >>> 全局名称空间 >>> 内置名称空间

  2. 当我们在全局名称空间中的时候

    ​ 全局名称空间 >>> 内置名称空间

    image-20221010194610556.png

    img

标签:形参,print,参数,名称,func,空间,实参,def
From: https://www.cnblogs.com/oiqwyig/p/16776967.html

相关文章

  • 函数基础2-函数参数,名称空间和作用域,名字的查找顺序
    目录函数基础2-函数参数,名称空间和作用域,名字的查找顺序今日内容概要今日内容详细函数参数值位置参数默认参数可变长形参可变长实参命名关键字参数(了解)名称空间名称空间存......
  • 函数参数与名称空间
    函数函数参数之位置参数位置参数位置形参和位置实参必须保持位置一致,按照从左往右依次填写的顺序位置形参函数定义阶段括号内从左往右一次填写的变量名deffunc1(nam......
  • python基础之名称空间
    python基础之名称空间目录名称空间1.名称空间分类2.名称空间存活周期及作用范围(域)3.名字的查找顺序作业名称空间1.名称空间分类#引入概念的例子name='jason'1......
  • 函数参数
    目录前言函数参数位置参数关键字参数默认参数可变长形参*args接受多余的位置实参**kwargs接受多余的关键字实参*args**kwargs组合使用干点反人类的事!对传参的总结可变......
  • 函数参数和名称空间
    目录一.函数参数1.位置参数2.默认参数3.可变长形参4.可变长实参5.命名关键字参数(只做了解)二.名称空间1.什么是名称空间1.内置名称空间2.全局名称空间3.局部名称空间2.名......
  • 函数的参数、名称空间知识
    昨日内容回顾硬盘操作数据的原理数据在计算机硬盘上保存时是一次性的,数据保存后即不可能再对这段数据内部进行修改。计算机数据的删除实质是对保存数据部分硬盘状态的......
  • 函数参数、名称空间与作用域、名字的查找顺序
    函数参数、名称空间与作用域、名字的查找顺序目录函数参数、名称空间与作用域、名字的查找顺序一、函数参数1.形参与实参2.位置参数3.关键字参数4.默认参数5.可变长形参6.......
  • 函数参数和名称空间
    函数参数之位置参数"""补充:当子代码只有一行并且很简单的情况下可以直接在冒号后编写不用换行"""位置形参 函数定义阶段括号内从左往右依次填写的变量名 deffunc......
  • idea 动态修改 java程序运行 jvm参数
    我们经常需要调优或者验证jvm参数又不想去修改配置文件就需要idea参数的形式修改测试代码点击查看代码packagecom.example.safepointTest;publicclassSafePoi......
  • python(函数参数与名称空间)
    今日内容概要函数参数名称空间与作用域位置参数,关键字参数,默认参数,可变长参数,命名关键字参数名字的查找顺序今日内容详细函数参数之位置参数​ 在调用函......