python学习笔记11(函数)

函数

概述: 在一个完整的项目中,某些功能会反复的使用。那么会将功能封装成函数,当我们要使用功能的时候直接调用函数即可

本质:函数就是对功能的封装

优点
1、简化代码结构,增加了代码的复用度(重复使用的程度)
2、如果想修改某些功能或者调试某个BUG,只需要修改对应的函数即可

定义函数:
格式:
def 函数名(参数列表):
语句
return 表达式

注释:
def :函数代码块以def关键字开始
函数名: 遵循标识符规则
(): 是参数列表的开始和结束
参数列表(参数1,参数2,……,参数n): 任何传入函数的参数和变量必须放在圆括号之间,用逗号分隔。函数从函数的调用者哪里获取的信息
冒号: 函数内容(封装的功能)以冒号开始,并且缩进
语句: 函数封装的功能
return: 一般用于结束函数,并返回信息给函数的调用者
表达式: 即为要返回给函数的调用者的信息
注意: 最后的return 表达式,可以不写,相当于return None

函数的调用
格式: 函数名(参数列表)
函数名: 是要使用的功能的函数函数名字
参数列表: 函数的调用者给函数传递的信息,如果没有参数,小括号也不能省略
函数调用的本质: 实参给形参赋值的过程

示例:

#定义了一个无参无返回值的函数
def myPrint():
    print("sunck is a very good man!")
    print("sunck is a nice man!")
    print("sunck is a handsome man!")

#调用函数
myPrint()

形参(形式参数):
概述: 定义函数时小括号中的变量,本质是变量,参数必须按顺序传递,个数目前要对应

def myPrint(str, age, hoby):
    print(str, age)    #并不会报错

def myPrint(str, age):
    print(str, age)

实参(实际参数): 调用函数时给函数传递的数据,本质是值

myPrint("sunck is a good man", 18)

函数返回值

#实现给函数两个数,返回这两个数的和
def mySum(num1, num2):
    #将结构返回给函数的调用者
    return num1 + num2
    #执行完return语句,该函数就结束了,return后面的代码不执行
    print("**********")

res = mySum(1, 2)
print(res)
#输出:3

参数传递
值传递: 传递的是不可变类型(string、tuple、number是不可变的)

def func1(num):
    print(id(num))
    num = 10
    print(id(num))

temp = 20
print(id(temp))     #输出:1758097008
func1(temp)   #num = temp      #输出:1758097008        1758096688
print(temp)    #输出:20,num只在函数内部存在,函数调用结束后不存在

引用传递: 传递的可变类型(list、dict、set是可变的)

def func2(lis):
    lis[0] = 100
li = [1,2,3,4,5]
func2(li)
print(li)    #输出:[100, 2, 3, 4, 5]

a = 10
b = 10
print(id(a), id(b))     #输出:1758096688 1758096688
b = 40
print(id(a), id(b))    #输出:1758096688 1758097648

关键字传递: 允许函数调用时参数的顺序与定义不一致

def myPrint(str, age):
    print(str, age)

#使用关键字参数
myPrint(age = 18, str = "sunck is a good man")

默认参数: 调用函数时,如果没有传递参数,则使用默认参数

#以要用默认参数,最好将默认参数放到最后
def myPrint(str, age = 18):
    print(str, age)

myPrint("kaige")
#输出:kaige 18

不定长参数: 能处理比定义时更多的参数
加了星号(*)的变量存放所有未命名的变量参数,如果在函数调用时没有指定参数,它就是一个空元组

def func(name, *args):
    print(name)
    print(type(args))
    for x in args:
        print(x)

func("sunck", "good", "nice", "handsom")
#输出:sunck       <class 'tuple'>       good         nice        handsom

def mySum(*l): 
    sum = 0
    for i in l:
        sum += i
    return sum
print(mySum(1,2,3,4,5,6,7))     #输出:28

** 代表键值对的参数字典,和*所代表的意义类似

def func2(**kwargs):
    print(kwargs)
    print(type(kwargs))

func2(x=1, y=2, z=3)     #输出:{'x': 1, 'y': 2, 'z': 3}      <class 'dict'>

匿名函数: 不使用def这样的语句定义函数,使用lambda来创建匿名函数
特点:
1、lambda只是一个表达式,函数体比def简单
2、lambda的主体是一个表达式,而不是代码块,仅仅只能在lambda表达式中封装简单的逻辑
3、lambda函数有自己的命名空间,且不能访问自由参数列表之外的或全局命名空间的参数
4、虽然lambda是一个表达式且看起来只能写一行,与C和C++内联函数不同。
格式: lambda 参数1,参数2,……,参数n:expression

sum = lambda num1, num2:num1 + num2
print(sum(1,2))

猜你喜欢

转载自blog.csdn.net/weixin_42216171/article/details/85625402
今日推荐