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

函数参数与名称空间

时间:2022-10-10 19:56:04浏览次数:46  
标签:name age print 函数参数 名称 func 空间 def

函数

函数参数之位置参数

位置参数
位置形参和位置实参必须保持位置一致,按照从左往右依次填写的顺序
位置形参
函数定义阶段括号内从左往右一次填写的变量名
def func1(name, age):
    print(name, age)

func1('tank', 28)
------------------------------------------------------------------------------------
位置实参
函数调用阶段括号内从左往右一次性填写的数据值
func1('tank', 28)
------------------------------------------------------------------------------------
位置形参和位置实参在绑定位置的时候就按照从左往右依此绑定, 个数必须相同, 多一个不行,少一个也不行。
位置实参也可以传绑定了数据值的变量名。
def func2(a, b):
    print(a, b)
func2(1, 2)  # 1, 2
func2(1, 2, 3) # 报错
s = 111
func2(s, 3)  # 111,3
同一个形参数不能多次赋值。
------------------------------------------------------------------------------------
使用注意
"""越短的和越简单的越靠前
  越长的越复杂的越靠后
 """

默认参数(关键字参数)

默认参数也称为关键字参数,别名叫默认参数。
形参和实参可以不一样,当我们不想用默认参数的时候,就需要在实参处重新传参。
默认参数也是遵循 越短的越简单的越靠前, 越长的越复杂的越靠后
def func1(a, gender='male'):
    print(a, gender)
func1(1,)  # 1, male
func1(1, 'female')  # 1, female
------------------------------------------------------------------------------------
def func1(job, age,gender='male'):      
    print(f"""
             职位:{job}
             年龄:{age}
             性别:{gender}
             """)
func1('无业游民', 28, 'female')
"""
             职位:无业游民
             年龄:28
             性别:female
             """
在我们修改默认参数时也可以直接用 关键字传参 eg: gender = ‘famale’
-----------------------------------------------------------------------------------
关键字参数
func1(job='无业游民', age=28, gender='female')
说白了就是指名道姓的传参  可以不按顺序。 按照形参名传参
"""关键字参数和位置参数组合使用时不可把关键字参数放在位置参数前"""

可变长参数(重要)

  在参数中带有一个* 或者两个**的(*后面跟着变量名 **也是如此) 我们称为可变参数。
*后面变量名可以随意写,但是一般是由*args  **kwargs 因为常用所以一般人都能看懂。
def func1(*args, **kwargs):pass
------------------------------------------------------------------------------------
  *号在形参中用于接收多余的位置参数,组成元组赋值给*号后面的变量名
def func(*args):
    print(args)
func(1, 2, 3, 4) # (1,2,3,4)
如果和位置参数组合使用那么要注意必须给到位置形参一个实参,不然会报错
def func(a, *args):
    print(a, args)
func(1, 2, 3, 4) # 1 (2,3,4,)
同理如果位置形参(短的简单的)在*args可变长参数后 数据会被*全部接收。位置形参没有数据就会报错
def func(*args, a):
    print(a, args)
func(1, 2, 3, 4)  # 报错
如果func()为空的话 直接是一个空元组 必须只有*args形参 因为位置参数必须绑定数据值
------------------------------------------------------------------------------------
**号在形参中用于接收多余的关键字参数,组成字典的方式赋值给**后面的变量名
def func(*args, **kwargs):
    print(args, kwargs)
func(1, 2, 3, 4, name='tank', age=28) # (1, 2, 3, 4) {'name': 'tank', 'age': 28}
func() #() {} 
组合使用
def func(a, *args, **kwargs):
    print(a, args, kwargs)
func(1, 2, 3, 4, name='tank', age=28) # 1 (2, 3, 4) {'name': 'tank', 'age': 28}

可变长实参(重要)

*和 ** 不仅可以在形参中使用也可以在实参中使用
def func(a, b, c):
    print(a, b, c)
l1 = [1, 2, 3]
l2 = [11, 22, 33]
func(*l1)  # 1 2 3
func(*l2)  # 11 22 33
*在实参中可以把列表里的数据取出来传给函数,类似与for循环 把数据取出来按照位置参数一次性传输函数
def func(a, b, c):
    print(a, b, c)
l1 = (1, 2, 3)
l2 = {11, 22, 33}
func(*l1)  #  1 2 3
func(*l2)  # 33 11 22 
*在实参可以操作 的数据类型很多,其中字典只能取出来键值,集合取出来后是无序的
l1 = {'name': 'jack', 'age': 18, 'salary': 20000}
func(*l1) # name age salary
------------------------------------------------------------------------------------
**在是实参中则是可以把字典打散成关键字参数 传给函数
def func(name, age, salary):
    print(name, age, salary)
l1 = {'name': 'jack', 'age': 18, 'salary': 20000}
func(**l1)  # jack  18  20000
也可以打乱关键字形参顺序
def func(age, name, salary):
    print(age, name, salary)
l1 = {'name': 'jack', 'age': 18, 'salary': 20000}
func(**l1)  # 18  jack 20000

名称空间

名称空间的含义

名称空间就是用来存放变量名和数据值绑定关系的地方。  

名称空间的分类

1.内置名称空间
python解释器已经定义好了,里面包含很多文字我们可以直接拿来用。
eg: len() print() open() 
----------------------------------------------------------------------------------- 2.全局名称空间
打开py文件时产生,里面存放文件级别的名字(编写代码产生的名字都会存在全局名称空间里)
name = 'tank'  # 变量名name存入全局名称空间
age = '28'  # 变量名age存入全局名称空间
while True:
    job = 'ceo'  # 变量名 job存入全局名称空间
if True:
    salary = 10000  # 变量名 salary存入全局名称空间
def func():  # 函数名 func 存入全局名称空间
    pass
-----------------------------------------------------------------------------------
3 .局部名称空间
函数体代码运行时产生的空间
def func():  
    name = 'tank'  # 变量名 name 存入局部名称空间

名称空间存活周期与作用范围

存活周期

1.内置名称空间
python解释器运行>>>>>创建
python解释器关闭>>>>>销毁
------------------------------------------------------------------------------------
2.全局名称空间
py文件打开>>>>>创建
py文件关闭>>>>>销毁
------------------------------------------------------------------------------------
3.局部名称空间
函数体代码执行>>>>>创建
函数体代码结束>>>>>销毁

作用范围

1.内置名称空间
解释器全局有效
------------------------------------------------------------------------------------
2.全局名称空间
py文件内全局有效
------------------------------------------------------------------------------------
3.局部名称空间
函数体代码中有效

名字的查找顺序

存放在名称空间的名字我们去哪里找呢
当我们查找名字的时候一定要先确定自己现在在哪个空间里
当我们在全局名称空间时
全局名称空间>>>内置名称空间
当我们在局部名称空间时
局部名称空间>>>全局名称空间>>>内置名称空间
len = '我是全局空间中的len'
def func():
    len = '我是局部空间中的len'
    print(len)  # 我是局部空间的len
func()  # 调用函数时就会产生局部内存空间
print(len) # 我是全局空间中的len

实操

相互独立的局部名称空间默认不能够互相访问
x = '你还好吗'
def func1():
    x = '有点不好'
    def func2():
        x = '怎么搞得'
        def func3():
            x = '想打你'
            print(x) # 想打你 语法执行到func3里时发现里面有x 变量名
        func3()
    func2()
func1() 
-----------------------------------------------------------------------------------
"""局部名称空间之间如果不是嵌套关系,则他们之间互不干涉"""  面试题
def index1():
    name = 'owen'
def index2():
    age = 20 
    print(name)  # 在函数名index局部名称空间中没有name,所有会发生报错
index1()
index2()

image

作业

2.判断下列money的值是多少并说明理由 思考如何修改而不是新增绑定关系
money = 100
	def index():
        money = 666	
 	print(money) # 100 因为print不在函数体代码中
    
   

	money = 100
 	def func1():
        money = 666
        def func2():
            money = 888
        func2()
   print(money) #100  print 不在上述 任何一个函数体代码中

标签:name,age,print,函数参数,名称,func,空间,def
From: https://www.cnblogs.com/LiaJi/p/16776239.html

相关文章

  • 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......
  • python(函数参数与名称空间)
    今日内容概要函数参数名称空间与作用域位置参数,关键字参数,默认参数,可变长参数,命名关键字参数名字的查找顺序今日内容详细函数参数之位置参数​ 在调用函......
  • 软件整理:网络空间搜索引擎
    1、钟馗之眼https://www.zoomeye.org/2、SHODAN撒旦https://www.shodan.io/3、FOFAhttps://fofa.info/toLogin4、Censyshttps://censys.io/ipv45、鹰图平台https://hunter.q......
  • 函数参数
    函数参数目录函数参数函数参数之位置参数默认参数可变长形参可变长实参命名关键参数名称空间与作用域名称空间1.内置名称空间2.全局名称空间3局部名称空间名称空间存活周......
  • 10月10日内容总结——函数参数和名称空间
    目录一、函数参数一、位置参数位置形参位置实参二、默认参数(关键字参数)关键字形参关键字实参三、可变长形参(可变长度的形参)四、可变长实参(可变长度的实参)五、命名关键字参......