前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python动态参数/命名空间/函数嵌套

Python动态参数/命名空间/函数嵌套

作者头像
py3study
发布于 2020-01-15 08:38:41
发布于 2020-01-15 08:38:41
85400
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

1. 函数的动态参数   1.1 *args 位置参数动态传参

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def chi(*food):
    print("我要吃", food)
chi("大米饭", "小米饭")
结果:我要吃 ('大米饭', '小米饭') # 多个参数传递进去. 收到的内容是元组tuple

  1.2 **kwargs 关键字参数动态传参

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def func(**kwargs):
    print(kwargs)
func(a=1, b=2, c=3)
func(a=1, b=2)
结果:
{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2}

  顺序:位置参数, *args, 默认值, **kwargs

  def func(*args, **kwargs):     pass

  形参的位置*,**: 聚合

  实参的位置*,**: 打散

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fun(*args):
    print(args)
lst = [1, 4, 7]
fun(lst[0], lst[1], lst[2])
fun(*lst) # 可以使用*把一个列表按顺序打散
s = "小短腿鲁班七号"
fun(*s) # 字符串也可以打散, (可迭代对象)

2. 命名空间

在python解释器开始执行之后, 就会在内存中开辟一个空间, 每当遇到一个变量的时候, 就把变量名和值之间的关系记录下来, 但是当遇到函数定义的时候, 解释器只是把函数名读入内存, 表示这个函数存在了, 至于函数内部的变量和逻辑, 解释器是不关心的. 也就是说一开始的时候函数只是加载进来, 仅此而已, 只有当函数被调用和访问的时候, 解释器才会根据函数内部声明的变量来进行开辟变量的内部空间. 随着函数执行完毕, 这些函数内部变量占用的空间也会随着函数执行完毕而被清空.

  2.1 内置名称空间 -- 存放python解释器为我们提供的名字, list, tuple, str, int 等这些都是内置命名空间

  2.2 全局名称空间 -- 我们直接在py文件中, 函数外声明的变量都属于全局命名空间

  2.3 局部名称空间 -- 在函数中声明的变量会放在局部命名空间

加载顺序:内置命名空间 >>> 全局命名空间 >>> 局部命名空间(函数被执行的时候)

取值顺序: 局部命名空间 >>> 全局命名空间 >>> 内置命名空间

  作用域:

作用域: 作用域就是作用范围, 按照生效范围来看分为 全局作用域和局部作用域

    全局作用域: 包含内置命名空间和全局命名空间. 在整个文件的任何位置都可以使用(遵循从上到下逐行执行).

    局部作用域: 在函数内部可以使用.

    1. 全局作用域: 内置+全局     2. 局部作用域: 局部(函数被调用)     3. globals() 查看全局中的内容     4. locals() 查看当前作用域中的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = 10
def func():
    a = 40
    b = 20
def abc():
    print("哈哈")
    print(a, b) # 这里使用的是局部作用域
    print(globals()) # 打印全局作用域中的内容
    print(locals()) # 打印局部作用域中的内容
func()

3. 函数嵌套   函数可以互相的嵌套

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fun1():
    print(111)
def fun2():
    print(222)
    fun1()
fun2()
print(111)

# 函数的嵌套
def fun2():
    print(222)
    def fun3():
        print(666)
    print(444)
    fun3()
    print(888)
print(33)
fun2()
print(555)    

4. global和nonlocal关键   global: 在局部访问全局中的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = 100
def func():
    global a # 加了个global表示不再局部创建这个变量了. 而是直接使用全局的a
    a = 28
    print(a)
func()
print(a)

  nonlocal: 在局部寻找外层函数中离他最近的那个变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = 10
def func1():
    a = 20
    def func2():
    nonlocal a
    a = 30
    print(a)
    func2()
    print(a)
func1()
# 结果:
# 加了nonlocal
# 30
# 30
# 不加nonlocal
# 30
# 20
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python入门到放弃-函数专题
一、函数的定义 函数是对代码块和功能的封装和定义 #函数的语法:def是define的意思,定义 最基本的语法: def 函数名(): 函数体    函数名() #调用函数 带有参数的语法 def 函数名(形参列表): 函数体(代码块,return) 函数名(实参列表) :调用 #例子:函数执行过程 # def wan(): #定义函数 # print("今天一起去玩") # print("去哪里玩呢") # print("我不知道"
老油条IT记
2020/03/20
1.8K0
day 10 函数的进阶
位置  *args 默认值  **kwargs   以后写参数,可以随意的进行搭配
py3study
2020/01/20
3030
命名空间和作用域
命名空间(Namespace)是从名称到对象的映射,命名空间的内容以字典形式给出,字典的key是已命名的变量或函数名称,value是这些变量或函数的值。简单地说就是将不同的名称分类 一般有三种命名空间: ①内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。 ②全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。 ③局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)
用户7886150
2021/01/20
1.1K0
2.Python函数的进阶
昨天我们从形参角度,讲了两种参数,一个是位置参数,位置参数主要是实参与形参从左至右一一对应,一个是默认值参数,默认值参数,如果实参不传参,则形参使用默认参数。那么无论是位置参数,还是默认参数,函数调用时传入多少实参,我必须写等数量的形参去对应接收, 如果不这样,那么就会报错:
changxin7
2019/09/10
3090
2.Python函数的进阶
Python函数(一)之杵臼之交
函数的结构:       def 函数名():             函数体             return语句
py3study
2020/01/17
7210
python3--函数进阶
TypeError: func() missing 4 required keyword-only arguments: 'a', 'b', 'c', and 'd'
py3study
2018/08/02
5090
07 . Python3函数
Python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说不可变对象和传可变对象
iginkgo18
2020/09/27
5060
函数的基本使用(三)
目录 函数基本使用(三) 1、名称空间的作用域 global与nonlocal关键字使用 2、函数对象(函数名) 思维导图: 1、函数名可以当做变量值赋值 2、函数名还可以当作函数的实参 3、函数名还可以当做函数返回值 4、函数名可以作为容器类型的元素 3、函数的嵌套 1、定义 2、嵌套使用 4、闭包函数 1、定义: 2、闭包函数的使用方式(传参) 方式一: 方式二: 5、装饰器 1、定义 2、原则 3、装饰器核心思想---- 函数基本使用(三) 1、名称空间的作用域 作用域:名称空间所能够作用的
HammerZe
2022/03/24
2750
函数的基本使用(三)
Python3 | 练气期,函数创建、参数传递、作用域!
描述:上一章,我们学习了Python3编程中最基本而得流程控制语句,相信大家在作者的实践下也已经掌握了相关关键字了吧,这一章我们一起学习Python3编程入门中函数定义、函数调用、函数参数(传递、类型),匿名函数、递归函数。内嵌函数和闭包、装饰器函数,以及命名空间作用域的讲解,它也是Python编程中最基础且常用的部分,所以说也是需要我们掌握的。
全栈工程师修炼指南
2024/07/29
810
Python3 | 练气期,函数创建、参数传递、作用域!
python函数对象-命名空间-作用域-02
知识点: # 函数名可以作为容器对象的元素值 , # 函数名(即函数内存地址)可以加括号直接调用
suwanbin
2019/09/26
6360
python函数对象-命名空间-作用域-02
可变长参数、函数的嵌套、名称空间和作用域学习笔记
nick说:人生疾苦唯有自救,这是你相信IT的最后一次机会。这个时候必须得逼自己一把,只有对自己够狠才能慢慢强大。昨天看一哥们在博客上说每天大喊一遍python第一java第二,python大法无所不能,给自己以一个乐观积极的态度好好学习天天向上。加油,希望我们每一个人都不负光阴。
GH
2022/05/10
4130
可变长参数、函数的嵌套、名称空间和作用域学习笔记
可变长参数,函数的嵌套,名称空间,关键字
形参中的会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给后的参数。需要注意的是:*后的参数名约定俗成为args。
小小咸鱼YwY
2019/07/24
1.2K0
由一个例子到python的名字空间
可以正常输出结果: 并且需要注意,在func2使用x变量之前的名字空间就已经有了'x':1.
py3study
2020/01/03
4150
Python函数用法
python中函数的参数有位置参数、默认参数、可变参数、命名关键字参数和关键字参数,这个顺序也是定 义函数时的必须顺序。
星陨1357
2023/03/14
4310
图解python | 命名空间与作用域
教程地址:http://www.showmeai.tech/tutorials/56
ShowMeAI
2022/02/23
1.5K0
图解python | 命名空间与作用域
19-3-14Python中函数的进阶
注意:参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。
GhostCN_Z
2020/04/03
3380
Python 函数与变量作用域
# Python 函数与变量作用域 # 函数的创建和调用 什么是函数 函数就是执行特定任务和以完成特定功能的一段代码 为什么需要函数 复用代码 隐藏实现细节 提高可维护性 提高可读性便于调试 函数的创建 """ @Author :frx @Time :2021/10/25 17:36 @Version :1.0 """ def calc(a,b): c=a+b return c result=calc(1,2) print(result) #3 # 函数的参数传递
用户9615083
2022/12/25
4550
Python 函数与变量作用域
python命名空间和作用域
python中的命名空间可以看作每个名称名称到对应对象的映射,是名称的集合。不同的命名空间可以在给定时间共存,但完全隔离。当启动python解释器时,会创建一个包含所有内置名称的命名空间,并且只要该解释器运行,命名空间就会存在,hence,内置的方法如:id(), print()始终可以在任何地方运行。
用户9955628
2022/09/08
4450
python函数详解
    *args接收全部位置参数,聚合为元祖 **kwargs接收全部关键字参数,聚合为字典
py3study
2020/01/13
4950
爬虫 (二十四) 或许这样认识 python 函数会更有趣 (十五)
相信如果你慢慢把这篇文章读完,然后加以实践,你会对 python 函数会有很大的理解,加油看完哦
公众号---人生代码
2020/01/13
4270
相关推荐
python入门到放弃-函数专题
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验