Python语法第8讲:函数

Python中的函数类似于Java中的方法,函数的作用是使得代码更加的粒子化,在函数中Coder可以封装自己的部分业务逻辑

1、函数

1.1、结构

 

def 函数名(参数列表):
    ...

def 函数名(参数列表): #定义带返回值的函数
    ...
    return 返回值

1.2、说明

 

在Python中用def关键字定义函数,函数名称随意,但是建议函数的命名要可以见名之意;当函数需要传递参数的时候,多个参数用半角逗号隔开;函数可以有返回值也可以没有返回值,函数的返回值需要使用return关键字来返回

1.3、示例

 

def myFunction(): #定义无参函数
    print("这是无参函数:hello world")

def info(name, age): #定义有参函数
    return "这是有参函数:I'm %s %s years old" %(name, age) #返回字符串

def info1(name="HanMeimei", age=36):  #参数可以设置默认值
    print("这是默认值参数函数:I'm %s %s years old" %(name, age))
    

#调用函数
myFunction()

result = info("Lilei", 18) #定义一个变量接收函数的返回值
print(result)

result = info(name="Lilei", age=18) #函数的调用,用关键字索引参数
print(result)

info1() #调用默认值参数函数,参数可以不传递,函数会传递参数的默认值

 

 

 

运行结果:

Python语法第8讲:函数_第1张图片
2、定义函数文档

类似与Java中方法的文档注释

 

def hello(): #函数的声明
    '这是我的第一个函数' #定义函数文档
    print("hello world")

print(hello.__doc__) #打印函数文档,双下划线
help(hello) #可以通过help函数打印函数文档

运行结果:

 

Python语法第8讲:函数_第2张图片

3、定义参数可变的函数

参数可变指的是参数的个数不确定

 

def myFunction1(*params): #定义可变参数的函数
    print("参数的长度是:%s" %len(params))
    for item in params:
        print(item)
myFunction1("hello", "world") #函数的调用

运行结果:

 

Python语法第8讲:函数_第3张图片

4、在函数中修改全局变量的值

在Python中无法再函数中修改全局变量的值,当函数中的变量名称与全局变量名称一致时,系统会认为函数中的变量是Coder定义的同名局部变量,所以当如果需要在函数中修改全局变量的值时,需要使用global关键字声明

 

#在函数中修改全局变量的值
count = 5;
def modifyCount(): 
    #count = 10 #不会修改全局变量count的值,因为函数中的count变量编译器会认为是局部变量
    global count #首先让编译器知道当前的变量是全局变量的引用
    count = 10 #修改局部变量的值
    
modifyCount() #调用函数
print("修改全局变量的值:%s" %count)

运行结果:

 


5、内嵌函数

5.1、内嵌函数

内嵌函数表示在函数中声明的函数,内嵌函数的作用域是外部函数,也就是说,内嵌函数在外部函数之外是无法访问的

 

#内嵌函数
def fun1():
    print("fun1被调用")

    def fun2():
        print("fun2被调用")
fun1()
#fun2() #程序会报错,原因是fun2函数的作用域仅在fun1中好用

运行结果:

 

5.2、内嵌函数之闭包

内部函数引用外部函数的变量,称之为闭包

 

#内嵌函数,闭包
def fun3(x):
    def fun4(y): #闭包,内部函数引用外部函数的变量称之为闭包
        return x+y
    return fun4
result = fun3(5)(6) #函数调用
print(result)

运行结果:

 

5.3、闭包函数修改外部函数的值

在闭包函数中,外部函数中的变量相当于全局变量

 

#内嵌函数,闭包,修改外部函数的值
def fun5(x):
    def fun6(): #闭包,内部函数引用外部函数的变量称之为闭包
        #x = x * x #直接修改外部函数中的变量的值是无效的
        nonlocal x
        x = x * x
        return x
    return fun6
result = fun5(5)()
print(result)

运行结果:

 

6、匿名函数

 

#匿名函数
fun = lambda x, y : x+y
#相当于
#def fun(x, y):
#    return x + y
result = fun(5, 6)
print(result)

运行结果:

 


7、内置函数

7.1、filter函数

filter函数的作用是过滤函数返回值为false的函数

#内置函数filter,实现输出0-10中所有偶数的需求
def ou(x):
    if x%2 == 0: #能被2整除的数都是偶数
        return True
fil = filter(ou, range(0, 10)) #定义一个filter,过滤ou函数所有为true的值,range函数每次生成的值都传递给ou函数的x参数
result = list(fil)
print("0-10之间所有的偶数是:")
for item in result:
    print(item, end="\t")

运行结果:

 


7.2、map函数

map函数的作用是用于映射,将值映射到函数的参数

 

#内置函数map,用于映射
def add(x):
    return x + 10
arr = map(add, range(0, 10))
print("0-10之间所有的数与10的和是:")
for item in arr:
    print(item, end="\t")

运行结果:

 


 

综合案例

需求说明:

商品出厂前都会给商品一个唯一的序列号,要求声明一个函数makeSN()生成一个6位数的随机序列号,并且输出到控制台

需求分解:

 

  • 1、声明一个无参函数makeSN(),函数返回值为字符串型,作用是生成序列号
  • 2、导入随机数模块random
  • 3、定义一个循环,循环6次
  • 4、每一次循环获得一个0-9的随机数,并且拼接在序列号的末尾
  • 5、调用方法输出到控制台

 

实现:

 

import random #导入random对象

def makeSN(): #生成序列号的函数
    num = ""
    for i in range(0, 6, 1):
        x = random.randint(0, 9) #生成一个0-9的随机数
        num += str(x)
    return num

sn = makeSN()
print("随机生成的6位产品序列号是:%s" %sn)

运行结果:

 


 

 

 

 

 

 



 

你可能感兴趣的:(Python基础)