函数

Posted 酒红色

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数相关的知识,希望对你有一定的参考价值。

函数的参数

形参与实参

def test(a,b):
    print(a,b)
test(1,2)

a,b为形参 1,2为实参 形参只有在被调用时才分配内存,在调用结束时即刻释放所分配的内存,因此形参只有在函数内部有效

 

参数的几种类型

①位置参数,必须一一对应,缺一不行多一也不行 

 test(1,2,3)

②关键字参数,无须一一对应,缺一不行多一也不行 

test(y=1,x=3,z=4)

③默认参数,可传可不传

def test(a,b,c=1):
    print(a,b,c)
test(1,2)
结果:1 2 1

④参数组

def test(x,*args,**kwargs):
    print(x)
    print(args)
    print(kwargs)
test(1,2,3,4,5,a = 1,b = 2)
test(1,*[2,3,4],**{a:1})
结果:1
   (2, 3, 4, 5)
   {‘a‘: 1, ‘b‘: 2}
   1
   (2, 3, 4)
   {‘a‘: 1}

大原则:位置参数必须在关键字参数的左边,*args就是把多余的位置参数放在一个元组里,**kwargs就是把关键字参数放在一个字典里

全局变量与局部变量(全局变量变量名大写;局部变量变量名小写)

无global关键字的情况:优先读取局部变量,能读取全局变量,但无法对全局变量重新赋值

name = xulan‘  //全局变量
def test():
    print(name)
test()
结果:xulan
name = xulan
def test():
    name = aaa‘  //局部变量
    print(name)
test()
结果:aaa
name = xulan
def test():
    name = aaa
    print(name)
test()
print(name)
结果:aaa
   xulan

但是对于可变类型,可以对内部元素进行操作

name = [a,b]
def test():
    name.append(c)
    print(name)
test()
print(name)
结果:[‘a‘, ‘b‘, ‘c‘]
   [‘a‘, ‘b‘, ‘c‘]

有global关键字的情况:变量本质上就是全局的那个变量,可读取可赋值

name = [a,b]
def test():
    global name
    name = 123
    print(name)
test()
print(name)

结果:123
   123

函数的嵌套(#为执行顺序)

NAME = ABC         #1
def a():
    name = a       #3
    print(name)      #4
    def b():
        name = b   #6
        print(name)  #7
    b()              #5
    print(name)      #8
a()                  #2

结果: a b a
name = ABC         
def a():
    name = a      
    def b():
        global name
        name = b   
    b()              
    print(name)      ---- a,这里不是b,b()函数改变的是全局变量,这里还是a()函数的局部变量name = ‘a‘
print(name) ---- ABC 
a()
print(name) ---- b
结果:ABC
   a
   b

nonlocal,指定上一级变量,如果没有就继续往上直到找到为止

name = ABC
def a():
    name = a
    def b():
        nonlocal name
        name = b
    b()
    print(name)    ----b,a()函数中的局部变量被b()函数修改
print(name)  ---- ABC
a()
print(name)  ---- ABC,全局变量并未修改

结果:ABC
   b
   ABC

 

以上是关于函数的主要内容,如果未能解决你的问题,请参考以下文章

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

在 Visual Studio 中创建构造函数的代码片段或快捷方式

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

web代码片段

C#常用代码片段备忘

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用