python之路--动态传参,作用域,函数嵌套
一 . 动态传参(重点) * , **
* 与 **
* 在形参位置. * 表示不定参数, 接收的是位置参数
接收到的位置参数的动态传参: 都是元组
def eat(*food): # 在形参这里把传递过来的实参进行了聚合,聚合成了元组
print(food)
eat("小米粥")
eat("小米粥", "咸鸭蛋")
eat("小米粥", "爆米花", "咸鸭蛋", "蒜茄子")
**在形参表示动态传参-关键字参数
关键字动态传参接收到的是字典
def func(**kwargs): # 也是聚合. ** 聚合成字典
print(kwargs)
func(a=1, b=2, c=3, haha="呵呵", good="not bad")
无敌传参
# 无敌传参
def func(*args, **kwargs): # 参数没有限制. 随便传递
print(args)
print(kwargs)
func(1,2,3,4, a=3,b=5)
聚合与打散
def chi(*food): # 这里是形参 聚合
print(food)
lst = ["胡萝卜", "大白菜", "大萝卜", "草", "果冻"] # 这里要输入列表或元组
chi(*lst) # 这里的*是打散 形成元组 def chi(**food): # 聚合, 聚合成字典
print(food)
dic = {"主食":'面条', "副食":"土豆泥", "汤":"疙瘩汤"} # 这里要输入字典
chi(**dic, 甜点="冰激凌") # 打散. 打散成关键字, 甜点 = '冰激凌' 可加可不加 # * 与 ** 放在形参是聚合, 放在实参是打散
传参顺序
位置参数, *args, 默认值, **kwargs
二 . 作用域与名称空间
名称空间顾名思义就是装名称的,比如我定义一个a = 10,那么这个a 所在的空间就是名称空间
作用域可以理解为起作用的区域,全局作用域就是在全局都起作用的,是内置+全局名称空间, print , input 就是内置,局部作用域就是在局部起作用的区域. globals() 查看全局作用域
locals() 查看当前作用域
三 . 函数的嵌套
函数的嵌套: 在函数中声明函数
函在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置
def outer():
def inner():
print("我的天哪")
print("还可以这样写???")
inner()
outer()
四 . nonlocal 和 global关键字
global: 在局部引入全局变量
nonlocal: 在局部..内层函数引入外层理他最近的那个变量
# 全局变量一般是不能随意的修改的
a = 10
def func():
# 慎用.
global a # global 表示从全局把一个变量引入到局部, 后面使用的a都是全局变量
a += 10 # ?? a = a + 10 # 现在的a是全局的, 你现在试图改全局变量
print("里面的打印",a)
func()
print("外面的打印", a) # nonlocal 在局部, 寻找离他最近的外层的一个变量
a = 50
def func1():
# a = 10 # 局部
def func2():
nonlocal a # 不找全局, global找全局
a += 10 # a = a + 10 python不让这么干
print("func2", a)
func2()
print(a)
func1()
print(a)
python之路--动态传参,作用域,函数嵌套的更多相关文章
- python--动态传参,作用域,函数嵌套
一 . 动态传参(重点) * , ** * 与 ** * 在形参位置. * 表示不定参数, 接收的是位置参数 接收到的位置参数的动态传参: 都是元组 def eat(*food): # 在形参这里 ...
- python函数的动态传参.作用域与命名空间
一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi ...
- python记录_day10 动态传参 命名空间 作用域
一.动态传参 动态传参用到 *args 和 **kwargs ,*号表示接收位置参数,args是参数名:**表示接收关键字参数,kwargs是参数名 def chi(*food): print(foo ...
- python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal
⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...
- python 全栈开发,Day10(动态参数,命名空间,作用域,函数嵌套)
一.动态参数 def func(a,b,c,d,e,f,g): pass func(1,2,3,4,5,6,7) 如果加30个参数呢?有没有万能的参数,可以代表一切参数呢? *args 动态参数,万能 ...
- python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数
1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...
- python-函数进阶-动态传参,名称空间,作用域的问题
一.函数的动态的动态参数 动态参数分为两种:动态接收位置参数.动态接收关键字参数. 1.*args 位置参数动态传参 # 顺序: 位置参数=>*args(arguments) => 默认 ...
- python(动态传参、命名空间、函数嵌套、global和nonlocal关键字)
一.函数的动态传参 1.*args位置参数动态传参 def chi(*food): print(food) chi("烧烤","火锅","虾吃虾涮&q ...
- 函数动态传参,命名空间,gloabal,nonlocal关键字
一.函数参数->动态传参(形参的第三种) 动态参数分为两种: 1)动态接收位置参数 普通的位置传参: def func(quality_food,junk_food): print('我要吃', ...
随机推荐
- UVA11882-Biggest Number(DFS+最优化剪枝)
Problem UVA11882-Biggest Number Accept: 177 Submit: 3117Time Limit: 1000 mSec Memory Limit : 1 ...
- Linux 系统安装
内容概要 VMware虚拟机软件应用 Linux系统安装设置 远程登录管理工具介绍 VMware 简介 VMware是一个虚拟PC的软件,可以在现有的操 作系统上虚拟出一个新的硬件 ...
- SSH远程SOLARIS11时被拒绝
在虚拟机中新安装的solaris11,安装过程中配置了静态IP地址用以方便ssh连接,使用root用户ssh连接时,密码没有错,但总是提示密码被拒绝,连接established 代表是通的,telne ...
- gcd和exgcd和lcm
Gcd▪ 欧几里得算法又称辗转相除法,用于计算两个正整数 a, b 的最大公约数.▪ 计算公式为 gcd(a,b) = gcd(b,a mod b).▪ 公式无需证明,记忆即可.▪ 如果要求多个数的最 ...
- Generative Adversarial Nets[LSGAN]
0 背景 在这之前大家在训练GAN的时候,使用的loss函数都是sigmoid_cross_entropy_loss函数,然而xudon mao等人发现当使用伪造样本去更新生成器(且此时伪造样本也被判 ...
- leetcode:Single Number
public int SingleNumber(int[] nums) { if(nums==null||nums.Length%2==0) return 0; int ret=nums[0]; fo ...
- oracle impdp将导出用户的所有对象导入至另一个用户下,生成的触发器语句问题处理
问题产生的操作步骤及详细说明: 1)操作的数据库是oracle 11g,先通过命令将用户GAS_NEW的数据导出,命令语句如下: expdp GAS_NEW/GAS_NEW@ORCL schemas= ...
- COMCMS 微进阶篇,从0开始部署到Centos 7.4
言:上一篇,我们介绍了,如何本地调试和部署到windows服务器. 本篇,将带大家,从0到1,开始部署到Centos系统上... 经过测试,可以完美支持Centos.这也是.net core 跨平台的 ...
- python第七章:常用模块--小白博客
yagmail模块 python标准库中发送电子邮件的模块比较复杂,因此,有许多开原的库提供了更加易用的接口来发送电子邮件,其中yagmail是一个使用比较广泛的开原项目,yagmail底层依然使用了 ...
- PHP实用代码片段(一)
1. 发送 SMS 在开发 Web 或者移动应用的时候,经常会遇到需要发送 SMS 给用户,或者因为登录原因,或者是为了发送信息.下面的 PHP 代码就实现了发送 SMS 的功能. 为了使用任何的语言 ...