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. P5112 FZOUTSY

    传送门 没想到这题还这能用莫队--本来看看以为复杂度会挂的-- 预处理出每个字母开头往后\(k\)个的字符串的哈希值,然后大概就是那道小z的袜子了 而且据说这题的哈希得用自然溢出 //minamoto ...

  2. C++结构体的应用_YCOJ

    结构体是一种自定义的东西,用struct来定义.在他里面, 可以装许多东西,比如int,string,char,bool等等等等. 如: struct a{ string name; int a; i ...

  3. 鸟哥私房菜基础篇:vim 程序编辑器习题

    猫宁!!! 参考链接:http://cn.linux.vbird.org/linux_basic/0310vi.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-我用 vi 开启某个档案后,要在 ...

  4. jquery html() 和text()的用法

    html()类似JS中的 innerHTML,首先看一段代码: <!DOCTYPE html> <html lang="en"> <head> ...

  5. webfrom ASP开发基础跟模式

    ASP.NET - .net开发网站应用程序的技术总称 ASP WebForm           MVC   是ASP.NET的两个技术方法 WebForm类似于WinForm,可视化操作 MVC类 ...

  6. JavaScript——数组的indexOf()方法在IE8中的兼容性问题

    昨天在工作中遇到一个问题:数组的indexOf()方法在IE8中无效. 如以下代码在IE8中报错“对象不支持“indexOf”属性或方法”: var arr = [1,2,3]; var index ...

  7. LN : leetcode 746 Min Cost Climbing Stairs

    lc 746 Min Cost Climbing Stairs 746 Min Cost Climbing Stairs On a staircase, the i-th step has some ...

  8. 洛谷P4013 数字梯形问题(费用流)

    题意 $N$行的矩阵,第一行有$M$个元素,第$i$行有$M + i - 1$个元素 问在三个规则下怎么取使得权值最大 Sol 我只会第一问qwq.. 因为有数量的限制,考虑拆点建图,把每个点拆为$a ...

  9. vb6如何调用delphi DLL中的函数并返回字符串?

    1,问题描述 最近发现vb6调用delphi DLL中的函数并返回字符串时出现问题,有时正常,有时出现?号,有时干脆导致VB程序退出 -- :: 将金额数字转化为可读的语音文字:1转化为1元 ???? ...

  10. Java堆分配参数总结

    与Java应用程序堆内存相关的JVM参数有: -Xms:设置Java应用程序启动时的初始堆大小 -Xmx:设置Java应用程序能获得的最大堆大小 -Xss:设置线程栈的大小 -XX:MinHeapFr ...