Python函数

Python函数

  • 如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数。

函数的定义

定义函数


    def 函数名():
        代码

调用函数

定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它

调用函数很简单的,通过 函数名() 即可完成调用。

# 函数的定义
def test():
    print('函数的定义')
# 函数的调用
test()

 函数的文档说明

# 函数的定义
def test(a,b):
     "用来完成对2个数求和"
     print("%d"%(a+b))
# 函数的调用
help(test)

输出

test(a, b)
    用来完成对2个数求和

函数的参数

  • 定义时小括号中的参数,用来接收参数用的,称为 “形参”
  • 调用时小括号中的参数,用来传递给函数用的,称为 “实参”
# 函数的定义  定义中的传参是形参
def test(a,b):
     print(a,b)
# 函数的调用
test(33,22) #调用的传参是实参

函数返回值

  • 所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果

带有返回值的函数

想要在函数中把结果返回给调用者,需要在函数中使用return

# 函数的定义  定义中的传参是形参
def test(a,b):
     return a+b
# 函数的调用
print(test(33,22)) #调用的传参是实参

4种函数的类型

函数根据有没有参数,有没有返回值,可以相互组合,一共有4种

  • 无参数,无返回值
  • 无参数,又反悔
  • 有参数,无返回值
  • 有参数,有返回值
  • 函数根据有没有参数,有没有返回值可以相互组合
  • 定义函数时,是根据实际的功能需求来设计的,所以不同开发人员编写的函数类型各不相同

 

#无参数无返回值
def demo1():
     print("demo1")
demo1()
#无参数有返回值
def demo2():
     return "demo2"
print(demo2())
#有参数无返回值
def demo3(a):
     print(a)
demo3("demo3")
#有参数有返回值
def demo4(a):
     return a
print(demo4("demo4"))

 函数的嵌套调用

一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用

#无参数无返回值
def demo1():
     print("demo1")
     print(demo2())

#无参数有返回值
def demo2():
     return "demo2"
#有参数无返回值
def demo3(a):
    demo1()

#有参数有返回值
def demo4(a):
     demo3("demo3")
     return a
print(demo4("demo4"))

 局部变量

  • 局部变量,就是在函数内部定义的变量
  • 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
  • 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用

全局变量 

如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量

a = 100 # 定义全局变量
def test1():
     a = 10 # 定义局部变量
     print(a)
def test2():
     print(a)
# 调用函数
test1()
test2()

输出

10
100 

  • 在函数外边定义的变量叫做全局变量
  • 全局变量能够在所有的函数中进行访问
  • 如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
  • 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧强龙不压地头蛇
a = 100 # 定义全局变量
def test1():
     global a  # 修改全局变量
     a = 10
     print(a)
def test2():
     print(a)
# 调用函数
test1()
test2()

 输出

10
10

函数返回值

# 函数返回多个值 本质是利用了元组
def divid(a, b):
    shang = a//b
    yushu = a%b
    return shang, yushu
sh,yu = divid(4,5)
print(sh,yu)

函数参数

缺省参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

def printinfo( name, age = 35 ):
   # 打印任何传入的字符串
   print ("Name:", name)
   print ("Age ", age)

# 调用printinfo函数
printinfo("miki" ) # 缺省的参数打印为默认值 35
age = 9
name = "Miki"
printinfo(name , age)

输出
Name: miki
Age  35
Name: Miki
Age  9

注意:带有默认值的参数一定要位于参数列表的最后面。

Python函数_第1张图片

不定长参数

有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。

基本语法如下:

    def functionname([formal_args,] *args, **kwargs):
       "函数_文档字符串"
       function_suite
       return [expression]

加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。

def fun(a, b, *args, **kwargs):
    """可变参数演示示例"""
    print ("a =", a)
    print ("b =", b)
    print ("args =", args)
    print ("kwargs: ")
    for key, value in kwargs.items():
        print (key, "=", value)
fun(1, 2, 3, 4, 5, m=6, n=7, p=8)  # 注意传递的参数对应

输出结果
a = 1
b = 2
args = (3, 4, 5)
kwargs: 
m = 6
n = 7
p = 8

Python中函数参数是引用传递(注意不是值传递)。对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。

递归函数

什么是递归函数

如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。

# 计算阶乘的 n!= 1*2*3*4*...*n
def calNum(num):
    i = 1
    result  = 1
    while i <= num:
       result *= i
       i+=1
    return result
ret = calNum(4)
print(ret)

#递归函数
def calNum(num):
    if num >= 1:
        result = num * calNum(num - 1)
    else:
        result = 1
    return result
ret = calNum(4)
print(ret)

匿名函数

匿名函数

用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

lambda函数的语法只包含一个语句,如下:

    lambda [arg1 [,arg2,.....argn]]:expression

Lambda函数能接收任何数量的参数但只能返回一个表达式的值

匿名函数不能直接调用print,因为lambda需要一个表达式

sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print("Value of total : ", sum(10, 20))
print("Value of total : ", sum(20, 20))
输出结果值
Value of total :  30
Value of total :  40

 

应用场合

函数作为参数传递

  1. 自己定义函数
#匿名函数
def fun(a, b, opt):
   print ("a =", a)
   print ("b =", b)
   print ("result =", opt(a, b))
fun(1, 2, lambda x,y:x+y)

输出结果值
a = 1
b = 2
result = 3
  1. 作为内置函数的参数

函数使用注意事项

1. 自定义函数

无参数、无返回值

    def 函数名():
        语句

无参数、有返回值

    def 函数名():
        语句
        return 需要返回的数值

注意:

  • 一个函数到底有没有返回值,就看有没有return,因为只有return才可以返回数据

  • 在开发中往往根据需求来设计函数需不需要返回值

  • 函数中,可以有多个return语句,但是只要执行到一个return语句,那么就意味着这个函数的调用完成

有参数、无返回值

    def 函数名(形参列表):
        语句

注意:

  • 在调用函数时,如果需要把一些数据一起传递过去,被调用函数就需要用参数来接收

  • 参数列表中变量的个数根据实际传递的数据的多少来确定

有参数、有返回值

    def 函数名(形参列表):
        语句
        return 需要返回的数值

函数名不能重复

2. 调用函数

调用的方式为:

    函数名([实参列表])

调用时,到底写不写 实参

  • 如果调用的函数 在定义时有形参,那么在调用的时候就应该传递参数

调用时,实参的个数和先后顺序应该和定义函数中要求的一致

如果调用的函数有返回值,那么就可以用一个变量来进行保存这个值

3. 作用域

在一个函数中定义的变量,只能在本函数中用(局部变量)

在函数外定义的变量,可以在所有的函数中使用(全局变量)

你可能感兴趣的:(Python学习,python,开发语言)