Python之路【第十二篇】:函数

定义函数

def 函数名(形式参数):
函数体
return 返回值

a = 1
def f(b):
    print(b)
    return None

如上所示,就是简单的定义了一个函数

函数的返回值

  return后面为函数的返回值,跟其他编程语言不一样的是,在python中,不需要在def前面指定函数返回值的类型

如果函数没有返回值,默认返回一个None

在函数里面,只要执行了return,函数就执行完了,函数中return后面的代码就不执行了

函数的参数

  • 形参和实参
  • 指定参数
  • 默认参数
  • 动态参数
  • 函数作为参数

形参和实参

在定义函数的时候,函数名后面括号里的参数是形式参数,简称形参

在执行函数的时候,函数名后面括号里的参数是实际参数

a = 1
def f(b):
    print(b)
f(a)

如上所示,b为形参,a为实参

指定参数

形参与实参默认是按照顺序一一对应的,如def f(x,y)......f(1,2),x与1对应,y与2对应,但是也可以指定参数,这样,形参与实参就不用一一对应了

def f(x,y)......f(y=1,x=2),这样就是指定参数

默认参数

def drive(p,name = 'alex'):
    temp = name + str(p) + '开车去东北'
    return temp
s = drive(11)
print(s)

输出结果为:

alex11开车去东北

在上面的例子中,p是一个普通参数,name具有默认参数,一定要把含有默认值的参数放在后面

也可以给含有默认值的参数传递参数,这时默认值就不起作用了

动态参数

第一种动态参数:在形参列表中,在形参前面加上一个*,这样参数就可以不受数量限制了,如:

def f(*a):
    print(a)
    print(type(a))
f(1,2,3,4,5)

输出结果为:

(1, 2, 3, 4, 5)
<type 'tuple'>

由此可见,虽然只有一个形参a,但是却接受了5个参数,还有一点需要注意,第一种动态参数的类型是元组类型

第二种动态参数:在形参列表中,在形参的前面加上两个*, 在传递参数的时候,必须是键值对传(key=value),第二种动态参数会将闯进来的参数转换成字典,如:

def f(**a):
    print(a)
f(k1=1,k2=2)

  输出结果为:

  {'k2': 2, 'k1': 1}

  一般,第一种动态参数用args表示,第二种动态参数用kwargs表示,因此因该是这样:f(*args)与f(**kwargs)

  两种动态参数可以放在一起使用

def fun(*args,**kwargs)...注意:*args在前面,**kwargs在后面,这个是规定死了的,不能变
fun(11,22,33,44,key1=value1,key2=value2)
这样自动就把11,22,33,44方到args中,key1=value1,key2=value2放放到kwargs中,
def fun(p,*args,**kwargs)...
fun(11,22,33,44,key1=value1,key2=value2)
这样,把11自动给p,22,33,44给args,key1=value1,key2=value2放放到kwargs中

函数作为参数 

def f1():
return 123
print(f1)

  输出结果为:<function f1 at 0x000001ABF30ED268>,由此,我们可以看出:

  f1:代指函数

  f1():调用函数

def f1():
    return 123
def f2(f1):
    f1()
    return 456

在f2函数中,参数为f1,这个时候,f1做了f2的参数

全局变量与局部变量

  约定:全局变量都大写,局部变量都小写

在函数内部,如果想要修改全局变量需要加一条global A语句

A = 1
def fun():
    b = 2
    global A
    A = 3
fun()
print(A)

  A为全局变量,b为局部变量,如果想要修改A,需要加一条global A语句,如果不加该语句,b=1 A=3直接这样,表示又申请了一个局部变量A

 

三样东西有助于缓解生命的疲劳:希望、睡眠和微笑。---康德
原文地址:https://www.cnblogs.com/ronghe/p/8358591.html