欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python3函数

程序员文章站 2022-06-12 22:54:03
...

函数定义

函数是一个可以共用的完成某个特定功能的代码片段,以def开头,名称后面加个(),这就是函数,()中可以有形参。

def myFun():
    print("hello my Function!")
myFun()

参数

我们提到的()中的内容,在定义函数时给定的名称称作“形参”(Parameters) ,在调用函数时你所提供给函数的值称作“实参”(Arguments) 。

  • 默认参数
    存在一种情况,如果函数调用者没有经验对参数输入准确值,那么在函数定义的时候,可以给参数设置默认值。调用者如果不输入这个参数,就使用默认值;如果调用者输入了参数值,就使用调用者输入的值。
def myFun2(x, y=2):
    print(x * y)
myFun2("a")
myFun2("a", 3)
输出:
aa
aaa

如果定义函数时,同时存在默认值参数和普通参数,一般将带默认值得参数放在最后。

  • 关键字参数
    调用函数的时候,如果存在默认参数,并且我们需要跳跃着给参数赋值,那么可以直接按照参数的名字赋值,这种方法简单有效,非常形象。
def myFun3(a, b=5, c=10):
    print('a is', a, 'and b is', b, 'and c is', c)
myFun3(2,7)
myFun3(a=2,c=7)
myFun3(a=2,b=3,c=7)

输出:
a is 2 and b is 7 and c is 10
a is 2 and b is 5 and c is 7
a is 2 and b is 3 and c is 7
  • 数量可变参数
def myFun4(x, *y, **z):
    print("x=", x)
    #遍历元祖
    for t in y:
        print("y=", t)
    #遍历字典
    for k,v in z.items():
        print("zKey=", k, ",zValue,", v)
myFun4(2, 5, 6, 7, tom=12, lilei=13)
输出:
x= 2
y= 5
y= 6
y= 7
zKey= tom ,zValue, 12
zKey= lilei ,zValue, 13

在参数序列中,*可接收元祖形式的参数,**可以接收字典形式的参数。

  • 可更改/不可更改参数
    在 python 中,string, tuple和 number 是不可更改的对象,而 list,dict 等则是可以修改的对象。不同对象作为实参,传递给函数,结果是不相同的。
    对于不可变类型,比如先赋值x=7,然后再赋值x=8,并不是更改了x,而是重新创建了一个变量x。对于可变类型,比如变量赋值 la=[1,2,3,4] 后,再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
#不可变类型传递
def myFun5(x):
    x = 7
k = 5
myFun5(k)#传递不可变数据
print("k=", k)
输出:
k= 5#函数处理后,k的值并没有变

#可变类型传递
def myFun6(la):
    la.extend([7,8,9])
list1 = [1,2,3]
myFun6(list1)#传入可变类型
print(list1)
输出:
[1, 2, 3, 7, 8, 9]

我们可以看到,传入不可变类型,变量没有变,传入可变类型,变量变了。

局部变量

所有变量定义之后,它的有效范围都是在它所在的代码块。在函数中定义的变量,有效范围是函数体内这个局部,称为局部变量,它与函数体外的同名变量没有任何冲突。

x = 9
def myFun7(x):
    x = 8
    print("Inner x is:", x)
myFun7(x)
print("Outer x is:", x)
输出:
Inner x is: 8
Outer x is: 9

可见,函数体外已经存在x,但是在函数体内仍旧可以创建x,并且局部变量x的改变并没有影响函数外的x。

global语句

有这样一种情况,在程序的最初定义了一个全局变量,希望这个变量无论是在函数体中,或者其他地方都可以使用,那么函数体内怎么使用这个变量呢?这就用到了global,它指定的变量,代表着这个变量来自于全局变量。

x = 1
def myFun8():
    global x
    print("Inner before x is:", x)
    x = 2
    print("Inner after x is:", x)
myFun8()
print("Outer x is:", x)
输出:
Inner before x is: 1
Inner after x is: 2
Outer x is: 2

DocStrings

我们写函数或者类的时候,我们需要写一些说明信息,表征这个对象的内容和特点,python便提供了一个查看这些帮助信息的属性。

def myFun9():
    '''I am DocString'''
    # 如果可能,将其转换至整数类型
    print("calling myFun9!")
myFun9()
print(myFun9.__doc__)
输出:
calling myFun9!
I am DocString

#使用help
help(myFun9)
输出:
Help on function myFun9 in module __main__:

myFun9()
    I am DocString

python自带的help功能,就是调用对象的DocStrings