小学生都能学会的python(函数的进阶)

时间:2022-01-29 06:01:30

小学生都能学会的python(函数的进阶)

1. 动态传参
形参:
1. 位置参数
2. 默认值参数
3. 动态传参
*args 动态接收位置参数
**kwargs 动态接收关键字参数
def func(*args, **kwargs):
在形参上用*,** 表示聚合. 实参表示打散

顺序:
位置 *args 默认值 **kwargs

# def chi(*food): # * 表示的是不定参数. 可以传递任意个信息 参数名是food, 接受到的是元组
# print("我要吃", food)
#
# chi("一锅大米饭", "一箱辣条", "一桶方便面", "4L可乐")
# chi("方便面")
# chi("一大锅米饭", "一小锅小米饭", "一箱辣条", "一桶方便面", "4L可乐") # * 表接收位置参数的动态传参
# 传参的顺序
# 位置 *args 默认值 **kwargs
#
# 如果默认值参数在*args前面. 如果想让默认值生效. *args将永远接不到值
# def func( a, b, *args,c = 5): # arguments参数
# print(a, b, c, args)
#
# func(1,2,3,4,5,6,8,c = 10) # 关键字的动态传参
# *args 位置参数 接收到的是元组
# **kwargs 关键字的动态传参, 接收到的是字典
# def func(**kwargs): # key word arguments
# print(kwargs)
#
# func(a=10, b=20, jay="周杰伦", jj="林俊杰") # 无敌模式. 所有的参数都能接收
# def func(*args, **kwargs):
# print(args)
# print(kwargs)
#
# func(1, 2, 5, jj="陶喆", jay="zhoujielun", soup="胡辣汤") # def func(*args): # 在这里. 其实相当于把传进来的参数做了一次聚合, 聚合成一个元组
# print(args)
#
# lst = "娃哈哈"
# func(*lst) # 在实参位置 * 表示打散, 打散的是可迭代对象 # def func(**kwargs): # ** 把接收到的关键字参数打包(聚合)成字典
# print(kwargs) # 一定是字典
#
# dic = {"张无忌": "明教教主", "谢逊": "金毛狮王", "范瑶": "光明右使"}
#
# # func(张无忌=dic['张无忌'], 谢逊=dic['谢逊'], 范瑶=dic['范瑶'])
# func(**dic) # 这里的** 是把字典打散. 字典的key作为参数的名字, 字典的值作为参数的值传递给形参 # 在形参上
# 1. 位置参数
# 2. 默认值参数
# 3. 动态参数
# 1. *args 位置参数的动态传参. 系统会自动的把所有的位置参数聚合成元组
# 2. **kwargs 关键字的动态传参. 系统会自动把所有的关键字参数聚合成字典
# 3. def func(*args, **kwargs): 无敌传参
# 4. 顺序: 位置参数, *args, 默认值, **kwargs
# 5. 在使用的时候, 可以任意的进行搭配
# 4. 在实参上. *, **表示的打散. 在形参. *,** 表示聚合

  

2. 作用域
名称空间:
1. 内置
2. 全局
3. 局部

作用域:
1. 全局作用域: 内置+全局
2. 局部作用域: 局部

globals() 查看全局作用域中的内容
locals() 查看当前作用域中的内容

# 最开始会开辟一个自己的命名空间- 内置名称空间
# a = 10
# print(a)
# # 直接在py文件一个层面上是全局名称空间
# def func():
# hasakey = 10
# # 在函数内部属于局部名称空间
# func()
# 加载顺序: 内置 => 全局 => 局部
# 取值顺序: 局部 => 全局 => 内置 # a = 10 # 全局
# def func():
# # a = 20
# print(a)
#
# func() # 作用域: 变量或者函数的声明周期
# 全局作用域: 全局名称空间+内置名称空间
# 局部作用域: 局部名称空间
# a = 10 # 全局
# def func():
# liuwei = "刘伟" # 1. globals() 查看全局作用域中的所有内容
# qiao = "乔峰"
# def 抗收音机():
# bgm = "难念的经"
# print("娃哈哈")
# print(locals())
# 抗收音机() # # print(globals()) # 查看全局作用域中的内容
# # print(locals()) # locals()查看的是当前作用域中的内容

  

3. global nonlocal
global: 在局部引入全局变量
nonlocal: 在局部, 引入离他最近的那一层的变量

关于函数的嵌套

# def func1():
# print("我是func1")
#
# def func2():
# print("我是func2")
# func1()
#
# def func3():
# func2()
# print("我是func3")
# func3()
# 这样的代码不是嵌套. 互相调用 # 函数可以互相嵌套
# def outer():
# def inner():
# print("我是内部")
# print("我是外部")
# inner()
#
# outer() # def outer():
# print("我是外面的")
# def inner_1():
# def inner_2():
# print("我是里面的2")
# inner_2()
# print("我是里面的1")
# inner_1()
# print("我是外面的收尾")
#
# outer() # a = 10
# def func():
# global a #表示在当前作用域中的使用的a是全局中的变量
# a = 20 # 所有的a都是外面的了
# print(a) # 现在只有看的权利
#
# print(a) # 10
# func() # 20
# print(a) # 20 # def outer():
# a = 10
# def inner():
# nonlocal a # 找的是局部当中, 离他最近的上层的那个变量
# a = 20
# print(a)
# print(a) # 10
# inner() # 20
# print(a) # 20
# outer() # a = 1
# def fun_1():
# a = 2
# def fun_2():
# nonlocal a
# a = 3
# def fun_3():
# a = 4
# print(a)
# print(a)
# fun_3()
# print(a)
# print(a)
# fun_2()
# print(a)
# print(a)
# fun_1()
# print(a) # global 引入全局变量, 可以定义全局变量
# nonlocal 引入局部中离他最近的外层变量 # def func():
# global a # 没有也得有. 自动帮你创建
# a = 20
#
# func()
# print(a)

  

小学生都能学会的python(函数的进阶)的更多相关文章

  1. 小学生都能学会的python(函数)

    小学生都能学会的python(函数) 神马是函数 函数: 对功能或者动作的封装 函数的定义 def 函数名(形参列表): 函数体(return) ret = 函数名(实参列表) 函数的返回值 retu ...

  2. 小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)

    小学生都能学会的python(<<lamda匿名函数,sorted(),filter(),map(),递归函数,二分法>> 1. lambda 匿名函数 lambda 参数: ...

  3. 小学生都能学会的python&lpar;闭包和迭代器&rpar;

    小学生都能学会的python(闭包和迭代器) 1. 函数名第一类对象 函数名其实就是变量名 1). 可以像变量一样互相赋值. 2). 可以作为函数的参数,进行传递 3). 可以作为返回值返回 4). ...

  4. 小学生都能学会的python&lpar;编码 and 字符串&rpar;

    小学生都能学会的python(编码 and 字符串) 一,编码 最早的计算机编码是ASCII. 有英文+数字+特殊字符 8bit => 1byte 没有中文, 后面的编码必须兼容ASCII    ...

  5. 小学生都能学会的python&lpar;生成器&rpar;

    小学生都能学会的python(生成器) 1. 生成器 生成器的本质就是迭代器. 生成器由生成器函数来创建或者通过生成器表达式来创建 # def func(): # lst = [] # for i i ...

  6. 小学生都能学会的python&lpar;文件操作&rpar;

    小学生都能学会的python(文件操作) 1. open("文件路径", mode="模式", encoding="编码") 文件的路径: ...

  7. 小学生都能学会的python&lpar;深浅拷贝&rpar;

    小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...

  8. 小学生都能学会的python&lpar;小数据池&rpar;

    小学生都能学会的python(小数据池) 1. 小数据池. 目的:缓存我们字符串,整数,布尔值.在使用的时候不需要创建过多的对象 缓存:int, str, bool. int: 缓存范围 -5~256 ...

  9. 小学生都能学会的python&lpar;字典&lbrace; &rcub;&rpar;

    小学生都能学会的python(字典{ }) 1. 什么是字典 dict. 以{}表示. 每一项用逗号隔开, 内部元素用key:value的形式来保存数据 {"jj":"林 ...

随机推荐

  1. 【Java并发编程实战】----- AQS&lpar;一&rpar;:简介

    在前面博客中,LZ讲到了ReentrantLock.ReentrantReadWriteLock.Semaphore.CountDownLatch,他们都有各自获取锁的方法,同时相对于Java的内置锁 ...

  2. 神奇的decimal,也许面试会问到哦~

    这段时间忙的像狗一样,写博客的事情也就耽搁了,继续扯,为什么说decimal神奇呢,大家都知道decimal是基元类型,但是 这个decimal类型在IL中居然没有相应的IL指令,也就是说CLR根本不 ...

  3. POM&period;xml 标签详解

    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以 ...

  4. docker containerd 中的create 容器操作

    containerd的create container的API如下所示: type CreateContainerRequest struct { Id string BundlePath strin ...

  5. HTTPS-SSL&sol;TSL与SNI的关系以及同IP多域名虚拟主机的SSL&sol;TSL认证

    早期的SSLv2根据经典的公钥基础设施PKI(Public Key Infrastructure)设计,它默认认为:一台服务器(或者说一个IP)只会提供一个服务,所以在SSL握手时,服务器端可以确信客 ...

  6. greenDaoMaster的学习研究

    最近一直在研究一个第三方的开源框架,greenDaoMaster是一个移动开发的ORM框架,由于网上一直查不到使用资料,所以自己摸索总结下用法. 首先需要新建一个JAVA项目用来自动生成文件.需要导入 ...

  7. HW4&period;26

    public class Solution { public static void main(String[] args) { double sum; double item; for(int i ...

  8. PHPStorm配置Xdebug官方文档

    1 配置Xdebug 下载Xdebug 下载与您的PHP版本兼容的Xdebug扩展,并将其保存在该php/文件夹中. php/文件夹 的位置是在安装PHP引擎期间定义的. 如果您使用的是AMP软件包, ...

  9. 网络基础&&num;160&semi;HTTP协议之http&&num;160&semi;url简介

    HTTP协议之http url简介 by:授客 QQ:1033553122 http url简介 http url通过http协议,用于定位网络资源,是一种特殊类型的URI(统一资源定位) http_ ...

  10. Linux中断(interrupt)子系统之五:软件中断(softIRQ)

    转自:http://blog.csdn.net/droidphone/article/details/7518428 软件中断(softIRQ)是内核提供的一种延迟执行机制,它完全由软件触发,虽然说是 ...