python3函数

函数定义

函数是一个可以共用的完成某个特定功能的代码片段,以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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值