1.位置参数、关键字参数、默认参数的使用

  • 位置参数、关键字参数
 def test(x,y,z):
print(x)
print(y)
print(z)
test(1,2,3)
#位置参数,必须一一对应,缺一不行多一也不行
test(y=2,x=5,z=4)
#关键字参数,无须一一对应,缺一不行多一也不行

*位置参数必须在关键字参数左边

# test(1,y=2,3)#报错
# test(1,3,y=2)#报错
# test(1,3,z=2,y=4)#报错
# test(z=2,1,3)#报错
# test(1,3,z=2)#True,一个参数不可多次赋值
  • 默认参数
 def test(x,type='sb'):
print(x)
print(type)
test('laowang')
#结果:laowang
# sb

2.参数组

  • *列表、元组
 def test(x,*args):
print(x)
print(args)
test(1)
#结果:1
# ()
test(1,2,3,4,5)
#结果:1
# (2, 3, 4, 5)
test(1,{'name':'alex'})
#结果:1
# ({'name': 'alex'},)
test(1,['x','y','z'])
#结果:1
# (['x', 'y', 'z'],)
'''*可把参数组遍历出来'''
test(1,*['x','y','z'])
#结果:1
# ('x', 'y', 'z')
test(1,*('x','y','z'))
#结果:1
# ('x', 'y', 'z')
  •  **字典
 def test(x,**kwargs):
print(x)
print(kwargs)
test(1,y=2,z=3)
#结果:1
# {'y': 2, 'z': 3}
test(1,**{'a':4,'w':6})
#结果:1
# {'a': 4, 'w': 6}
def test(x,*args,**kwargs):
print(x)
print(args,args[-1])
print(kwargs,kwargs.get('y'))
test(1,1,2,1,1,11,1,x=1,y=2,z=3)
#报错

 还是前面说的,参数不可多次被赋值,最前面的位置参数1已经将形参中的x赋值了,后面又有一个位置参数x=1,想要再次将形参x赋值,所以会报错。

改正如下:

将位置参数删掉或者换一个不和形参冲突的

test(1,1,2,1,1,11,1,y=2,z=3)
#结果:1
# (1, 2, 1, 1, 11, 1) 1
# {'y': 2, 'z': 3} 2

3.全局变量和局部变量

通常全局变量变量名大写,局部变量变量名小写

*******************************************************************global*******************************************************************

  • 全局变量(不在函数内,顶格无缩进)

********************如果函数的内容无global关键字:全局变量只限访问,不能修改

 name='dsy'
def change_name():
name='太帅了'
change_name()
print(name)
#结果:dsy

********************如果函数的内容有global关键字:全局变量可以被修改

 name='dsy'
def change_name():
global name
name='太帅了'
change_name()
print(name)
#结果:太帅了
  • 局部变量(不顶格,有缩进)
 name='dsy'
def change_name():
name='太帅了'
print(name)
change_name()
#结果:太帅了
 name='dsy'
def change_name():
print(name)
change_name()
#结果:dsy

在一个函数内执行某段程序,优先读取局部变量,如果没有局部变量,再读取全局变量,局部变量无法对全局变量进行覆盖、更改、替换。

*******************************************************************nonlocal*******************************************************************

 name = "老段"
def laowang():
name = "老陈"
def laoli():
nonlocal name # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
name = "老李"
laoli()
print(name)
print(name)
laowang()
print(name)
#结果:老段
# 老李
# 老段

总结:在一个函数内打印一个变量,是由这一层向外一层一层的找变量名。

补充:在函数内对全局变量的引用是可以修改的

 name = 'laowang'
male = {'age':14}
def test():
def test1():
name = 'laoli'
male['age'] = 99
return test1
res = test()()
print(name) #结果:laowang
print(male) #结果:{'age': 99}

打印顺序例子:

                                     #执行顺序
name='老王' #
def laozhang(): #
name = "老张" #3.1
print(name) #3.2 第一次打印老张
def laoli(): #3.3
name = "老李" #3.4.1
print(name) #3.4.2 第二次打印老李
def laozhao(): #3.4.3
name = '老赵' #3.4.5.1
print(name) #3.4.5.2 第四次打印老赵
print(name) #3.4.4 第三次打印老李
laozhao() #3.4.5
laoli() #3.4
print(name) #3.5 第五次打印老张
laozhang() #
'''结果:老张
老李
老李
老赵
老张'''

 

python中的参数、全局变量及局部变量的更多相关文章

  1. Python中的参数

    Python中的参数 1. python函数参数有多重形式: * test(arg1,arg2,`*args`) * test(arg1,arg2,`*args`,`**kwargs`) 2. 其中比 ...

  2. 从 python 中 axis 参数直觉解释 到 CNN 中 BatchNorm 的工作方式(Keras代码示意)

    1. python 中 axis 参数直觉解释 网络上的解释很多,有的还带图带箭头.但在高维下是画不出什么箭头的.这里阐述了 axis 参数最简洁的解释. 假设我们有矩阵a, 它的shape是(4, ...

  3. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

  4. python中函数参数的引用方式

    值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...

  5. python中list作为全局变量无需global声明的原因

    发现一个问题. python中list变量作为全局变量时,在函数中可以直接修改. 而普通变量则需要先在函数中global声明,否则会报错. 例如: a = 1 def fun(): global a ...

  6. Python之路 day3 全局变量、局部变量

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 全局与局部变量 在子程序中定义的变量称为局部变 ...

  7. Python语法基础——关于全局变量与局部变量

    1.函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量,不管全局域中有没有用到该变量名,函数中使用的将是局部变量,例如: num = 100 def func(): num =  ...

  8. python中的参数问题

    python中的有默认参数和可变参数之分 默认参数arg 可变参数args, kargs 默认参数arg就是调用指定参数 可变参数*arg调用时传入的的参数会被python自动包装为列表 可变参数ka ...

  9. (转)python中的参数:*args和**kwargs

    def foo(*args, **kwargs):print 'args = ', argsprint 'kwargs = ', kwargsprint '---------------------- ...

随机推荐

  1. Educational Codeforces Round 21E selling souvenirs (dp)

    传送门 题意 给出n个体积为wi,价值为ci的物品,现在有一个m大的背包 问如何装使得最后背包内的物品价值最大,输出价值 分析 一般的思路是01背包,但n*v不可做 题解的思路 We can iter ...

  2. hdoj5806【尺取】

    (补题,妈蛋那时候大哥给我说是尺取,我不想打-真是艾斯比了-) 题意: 退役狗 NanoApe 滚回去学文化课啦! 在数学课上,NanoApe 心痒痒又玩起了数列.他在纸上随便写了一个长度为 n 的数 ...

  3. 树莓派 zero w 一根线使用

    参考网站:https://sspai.com/post/40086 硬件: 一台mac电脑 一根micro b usb线 一块zero w板子 一张micro sd卡 一.制卡 格式化 烧写镜像文件 ...

  4. bzoj 1022: [SHOI2008]小约翰的游戏John【anti-nim】

    如果全是1,那么n是奇数先手必败 否则,xor和为0先手必败 证明见 https://www.cnblogs.com/Wolfycz/p/8430991.html #include<iostre ...

  5. 11.5NOIP模拟赛

    /* 唉,那个第二种策略应该是没用吧. 为什么我列出式子最优策略跟第二种策略有关??为什么我写了写分布列还是跟第二种策略有关??为什么数学还没学到期望的孩子们都A了? 唉.人生啊. 0.5h后 我好像 ...

  6. 【POJ - 3190 】Stall Reservations(贪心+优先队列)

    Stall Reservations 原文是English,这里直接上中文吧 Descriptions: 这里有N只 (1 <= N <= 50,000) 挑剔的奶牛! 他们如此挑剔以致于 ...

  7. 黑客攻防技术宝典web实战篇:攻击应用程序逻辑习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 何为强制浏览?可以通过它确定哪些漏洞? 强制浏览包括避开浏览器导航对应用程序功能访问顺序实 ...

  8. LBP特征

    此篇摘取 <LBP特征原理及代码实现> <LBP特征 学习笔记> 另可参考实现: <LBP特征学习及实现> <LBP特征的实现及LBP+SVM分类> & ...

  9. 洛谷 P3768 简单的数学题

    https://www.luogu.org/problemnew/show/P3768 化简一下式子,就是$\sum_{d=1}^ncalc(d)d^2\varphi(d)$ 其中$calc(d)=\ ...

  10. python programming

    1. super 2. *args, **kwargs 3. class object 4. type 5. isinstance 6. list[:] = another_list