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. 51nod1432【贪心】

    对于每个数我找一个和他相加最接近独木舟,然后ans+=1; 想复杂了,直接两端来就好了. 然后两个相加如果<=m那么就让它们在一起,不是的话就让大的一艘船,然后继续搞(贪心) #include ...

  2. POJ1466/HDOJ1068 谈谈二分匹配的时间复杂度

    题意: n个学生编号是0-n-1,然后给出他们这些人和一些人的关系. 要你找出最大的人数,要求这些人之间没关系. 咳咳,题目中没说性别的关系TVT 思路: 很明显是一个匹配算法,但是我们得搞出一个二分 ...

  3. 水题 Codeforces Round #304 (Div. 2) A. Soldier and Bananas

    题目传送门 /* 水题:ans = (1+2+3+...+n) * k - n,开long long */ #include <cstdio> #include <algorithm ...

  4. web 另类方法实现“另存为”功能

    HTML5 的 FileReader 带给我们很强大的文件只读访问能力,可是在 HTML5 新增的 JS 中却没有发现有方便的另存到本地文件的相关 API,以往的办法要么调用浏览器的 save as ...

  5. 129 Sum Root to Leaf Numbers 求根叶数字总和

    给定一个只包含 0-9 数字的二叉树,每个根到叶的路径可以代表一个数字.例如,从根到叶路径 1->2->3则代表数字 123.查找所有根到叶数字的总和.例如,    1   / \  2  ...

  6. C. Memory and De-Evolution 逆向思维

    http://codeforces.com/contest/712/problem/C 要使得把三角形由边长n变成m,等价于由m变成n 如果是从n变成m,则很难判断每次判断变成多少.比如22的变成4, ...

  7. sql注入原理及解决方案

    sql注入原理 sql注入原理就是用户输入动态的构造了意外sql语句,造成了意外结果,是攻击者有机可乘 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的 ...

  8. 《Redis开发与运维》快速笔记(一)

    1.前言&基本介绍 在原始的系统架构中,我们都由程序直接连接DB,随着业务的进一步开展,DB的压力越来越大,为了缓解DB的这一压力,我们引入了缓存,在程序连接DB中加入缓存层, 从而减轻数据库 ...

  9. 利用贝塞尔曲线绘制(UIBezierPath)自定义iOS动态速度表,可以自定义刻度,刻度值,进度条样式

    GitHub的Demo下载地址 使用UIBezierPath画图步骤: 创建一个UIBezierPath对象 调用-moveToPoint:设置初始线段的起点 添加线或者曲线去定义一个或者多个子路径 ...

  10. Bootstrap基本理论

    Bootstrap,来自 Twitter,是目前最受欢迎的前段框架.Bootstrap是基于HTML.CSS.JAVASCRIPT的,它简洁灵活,使得Web开发更加快捷 Bootstrap特点:优雅, ...