Python基础学习——函数

基础规则:
函数代码块以def关键词开头,后接函数标识符名称和圆括号()

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

任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数(可多个,但尽量不要多于四个)。
函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

def area(width, height):
    return width * height
w = int(input("请输入宽"))
h = int(input("请输入高"))
print("面积是 =", area(w, h))

函数调用
定义函数,指定函数所包含的参数和代码块结构,通过另一个函数进行调用执行。

def zhengyuting(str):
    print(str)
    return
zhengyuting("Expecto Patronum!")  #调用函数
zhengyuting("Ridiculous!")     #再次调用函数

参数传递

zyt=[1,2,3,4,5]  #[1,2,3,4,5]的类型为List
zyt="zhnegyuting" #"zhnegyuting" 的类型为String,zyt没有类型,它是一个变量,是一个对象的引用(一个指针),可以指向各种类型

参数
调用函数时可以使用的参数类型:
①必需参数:以正确的顺序传入函数,调用时的数量和声明时的一致,调用函数时必须传入参数,否则报错。
在这里插入图片描述
②关键字参数
函数调用使用关键字参数来确定传入的参数值,使用关键字参数允许与声明时的不一致(Python解释器能够用参数名匹配参数值)

def zhengyuting(str):
    print(str)
    return
zhengyuting(str = "Expecto Patronum!")  #使用参数名进行函数调用

③默认参数
调用函数时,没有传递参数,则使用默认参数。
在这里插入图片描述
④不定长参数
一个函数能处理比当初声明时更多的参数。
使用一个星号即*以元组形式导入。(单独出现星号 * 后的参数必须用关键字传入。)
使用两个星号即**的参数会以字典的形式导入。

 def f(a,b,*,c):
     return a+b+c
f(1,2,3)   # 报错
f(1,2,c=3) # 正常
def zhengyuting(one,*thetuple):  #使用星号*的参数以元组形式导入,以存放所有未命名变量参数
    print(one)
    print(thetuple)
zhengyuting(1,2,3,4)

在这里插入图片描述
如果在函数调用时没有指定参数,它就是一个空元组,可以不向函数传递未命名的变量。
对象
可更改对象(可变类型):list,dict(类比:整容)
不可更改对象(不可变类型):string,tuples,numbers(类比:换人)
可更改表示它本身没有改变,只是它内部的一部分值被改变。
不可更改的对象在被修改时,实际上已经是新的对象。
可变类型在参数传递时,函数外部的参数也会受到影响,而不可变类型则不会受到影响。

#可变类型
def zhengyuting(zytlist):
    zytlist.append([1,2,3])
    print("inner",zytlist)
    return
zytlist=[4,5,6]
zhengyuting(zytlist)
print("outer",zytlist)

在这里插入图片描述

#不可变类型
def zhengyuting(a):
    a = 3
b = 1
zhengyuting(b)
print(b)

在这里插入图片描述
匿名函数
lambda 可以创建匿名函数。
匿名即不再使用 def 语句这样标准的形式定义一个函数。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法格式:

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

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章