简单易行介绍下python中函数的功底语法中国海洋

python 函数

定义

函数是指将一组语句的集纳通过多少个名字(函数名)封装起来,要想举行那几个函数,只需调用其函数名即可。

特性

  1. 削减代码重复
  2. 使程序变得可扩张
  3. 使程序变得简单维护

函数的创办

python中创建函数,必要运用__def__重中之重字,前边写函数的名字,然后是形参列表,大体如下:

def 函数名(形参列表):
    函数体......
    return 返回值

里头形参列表和 return再次回到值并不是必须的。

函数的运用

想要调用函数程序,须求以函数名加括号的款型展开调用,而括号内可以流传参数,而括号内的参数我们称为__实参列表__,传入的实参会通过形参传递进函数,在函数内部就足以接纳了。如下:

def add(x,y):
    return x + y

# 调用函数
add(10,20)

内需小心的是,python中的实参列表每二个参数在此之前用逗号分割,而向add()括号内的10,20那样的参数大家誉为地点参数(positional
argument)。

那就是说须要留意的是,在python中,函数的实参的个数必须和形参的个数一样,实参个数多于形参恐怕少于形参都会报错。

函数的参数

形参也可以叫做形参变量,唯有在被调用时才分配内存单元,在调用为止时,即自由所分配的内存单元。所以形参只能够在函数内部生效。函数调用截止重回主调用函数后则不可见再利用该形参变量。

实参可以是常量、变量、表达式、函数等,无论实参是何体系型的量,在进展函数调用时,它们都不可以不有规定的值,以便把这个值传送给形参。因而应优先用赋值,输入等艺术使参数得到显然值

中国海洋 1

默认参数

首先,先来看上面的代码:

def stu_register(name,age,country,course):
    print('------注册学生信息--------')
    print('学员姓名:',name)
    print('学员年龄:',age)
    print('学员国籍:',country)
    print('学员选择课程:',course)

stu_register('小明',19,'中国','web前端')
stu_register('小红',20,'中国','linux')
stu_register('李白',25,'中国','python')

在地点的实例中,每五个学童登记的国籍都以炎黄,而在网上的有些网站中,尽管不去手动设置,都暗许为中国,那就是因而私自认同参数达成的。

正如,把country变成默许参数,

def stu_register(name,age,course,country='中国')

那就是说此时再登记学员的时候即便国籍是华夏就能够不须求举办国籍的传参,而是选拔暗中同意的参数。

重中之重参数

平常情形下,给函数传参数要按梯次,不想按梯次就可以用关键参数,只需点名参数名即可,但切记3个渴求就是,关键参数必须放在地点参数之后。

# 使用关键字参数
stu_register(name='小明',country='中国',age=19,course='linux')
'''关键字参数必须放在位置参数之后'''
stu_register('小红',country='中国',age=19,course='linux')

非固定参数

即便您的函数中并不是很鲜明用户会传出多少个参数,那么就可以采取非固定参数。

'''非固定参数'''
def test01(x,y,*args):
    print(x,y)
    print(args)

test01('李白','艳艳',12,3,4)

出口结果为:

李白 艳艳
(12, 3, 4)

亟待注意的是,当使用了*args的时候,会发现传入的参数全体被放在了二个元组中。那么只要想要操作的话只需遵守元组的操作办法操作即可。

非固定参数除了可以转换成元组以外,还足以将盛传的数量转换来字典,须要采纳**kwargs,代码如下:

def stu_register(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式
    print(name,age,args,kwargs)

stu_register("Alex",22)
#输出
#Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空

stu_register("Jack",32,"CN","Python",sex="Male",province="ShanDong")
#输出
# Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}

一部分变量和全局变量

在python中,函数外部声明的变量大家誉为全局变量,在函数内部宣称的变量是一对变量。

全局变量可以在变量注解之后的其它岗位选择,而有个别变量只能够够在函数内部使用。

'''全局变量和局部变量'''
name = '李白' # 函数外部声明 ,称之为全局变量

def test():
    age = 20 # 函数内部声明,称之为局部变量
    print(age) # 局部变量只能够在函数内部使用
    print(name) # 全局变量可以在函数内部使用
test()
# print(age) 在函数外部没有办法使用局部变量

__tip:函数内部宣称全局变量__

比方想要在函数内部宣称全局变量,必要接纳global关键字

def test():
    global test
    test = '李白斗酒诗百篇'
test()
print(test) # 李白斗酒诗百篇

透过global关键字就可见在函数内部成立全局变量,不过那种写法是不推荐使用的,有可能引致变量污染。

再有少数亟待注意,看上边的代码:

name = '艳艳'

def test():
    # 在函数中更改全局变量name的值
    name = 'hello,world'
    print(name) # hello,world
test()
print(name) # 艳艳

上述代码中,在函数中对全局变量举办了改动,并且打印更改之后的变量,那么打印的结果是更改的结果,不过在函数的外围再度打印在函数中改变的全局变量,发现结果并不曾被更改,因为在函数中改变全局变量,那么更改过后的值功能域仅停留在函数当中。

那就是说什么样在函数中对全局变量更改并且在函数外部调用结果为转移之后的值吗?同样可以拔取global关键字来完结。

name = '艳艳'

def test():
    global name
    # 在函数中更改全局变量name的值
    name = 'hello,world'
    print(name) # hello,world
test()
print(name) # hello,world

返回值

要想取得函数的履行结果,就可以用return语句把结果回到

注意:

函数在实施进度中如果碰着return语句,就会甘休执行并重回结果,so
也得以领略为 return 语句代表着函数的收尾
假诺未在函数中内定return,那那么些函数的再次回到值为None 。

递归函数

在函数内部,可以调用其余函数。借使三个函数在其中调用自个儿自个儿,这一个函数就是递归函数。

'''创建一个递归,将传入的参数不断的除以2,到0为止'''
def calc(n):
    print(n)
    if int(n/2) > 0 :
        return calc( int(n/2) )

calc(10)

出口结果为:

10
5
2
1

递归本性:

  1. 务必有三个鲜明的完成条件

  2. 历次进入更深一层递归时,难点规模比较上次递归都应负有减小

  3. 递归成效不高,递归层次过多会促成栈溢出(在微机中,函数调用是由此栈(stack)那种数据结构完成的,每当进入三个函数调用,栈就会加一层栈帧,每当函数重回,栈就会减一层栈帧。由于栈的轻重缓急不是无限的,所以,递归调用的次数过多,会造成栈溢出)

堆栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html