python函数

1.函数的定义与调用

# 定义一个函数
def hello():
    print("hello world")

def hello_name(name):
    print("hello", name)

def area(a, b):
    return a+b
# 调用函数
hello()
hello_name("siri")
print(area(2, 4))

2.参数传递

  • 可更改对象与不可更改对象

(1)在python中,类型属于对象,变量是没有类型的,变量可以理解为是一个对象的引用,是一个指向对象的指针;

(2)可更改对象:数字、字符、元组,不可更改对象:列表、字典、集合;

(3)修改不可变对象的值时,实际上是重新生成了一个对象,原来的引用指向新生成的对象;

(4)修改可变对象的值时,实际上是直接修改了原来的值,引用没有变化;

(5)不可变对象传递参数时,传递过去的是他的值,在函数中修改这个值后,是新生成了一个对象,原来的变量还是指向原来的对象,所以原来的变量的值不会改变;

def test(b):
    print(id(b))
    b = b/2
    print(id(b))


a = 1
print(id(a))
test(a)
C:\Users\max\Desktop\pythonStudy\venv\Scripts\python.exe C:/Users/max/Desktop/pythonStudy/demo.py
140707870840480
140707870840480
2393646856240

进程已结束,退出代码 0

(6)可变对象传递参数时,传递过去的是他本身,修改后这个变量的值也会改变。

def test(b):
    print(id(b))
    b[0] = 2
    print(id(b))


a = [1, 2]
print(id(a))
test(a)
C:\Users\max\Desktop\pythonStudy\venv\Scripts\python.exe C:/Users/max/Desktop/pythonStudy/demo.py
1631128189056
1631128189056
1631128189056

进程已结束,退出代码 0
  • 调用函数时参数种类

(1)必须参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

(2)关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

def print_it(name, age):
    print(name, "is", age)


# 使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
print_it(age=8, name="Berry")
C:\Users\max\Desktop\pythonStudy\venv\Scripts\python.exe C:/Users/max/Desktop/pythonStudy/demo.py
Berry is 8

进程已结束,退出代码 0

(3)默认参数

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

def print_it(name, age=18):
    print(name, "is", age)


print_it("Berry")
C:\Users\max\Desktop\pythonStudy\venv\Scripts\python.exe C:/Users/max/Desktop/pythonStudy/demo.py
Berry is 18

进程已结束,退出代码 0

(4)不定长参数

# 加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数
def print_it1(*num):
    print(num)


# 加了两个星号**的参数会以字典的形式导入
def print_it2(**num):
    print(num)


# 声明函数时,参数中星号*可以单独出现,单独出现星号*后的参数必须用关键字传入
def print_it3(*, c):
    print(c)


# 可以不传递变量
print_it1()
print_it1(1, 2, 3)
print_it2()
print_it2(a=1, b=2, c=3)
print_it3(c=1)
C:\Users\max\Desktop\pythonStudy\venv\Scripts\python.exe C:/Users/max/Desktop/pythonStudy/demo.py
()
(1, 2, 3)
{}
{'a': 1, 'b': 2, 'c': 3}
1

进程已结束,退出代码 0

(5)强制位置参数

  •  python3.8新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。

3.匿名函数

  • python 使用 lambda 来创建匿名函数

(1)lambda 只是一个表达式,函数体比 def 简单很多。

(2)lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

(3)lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

(4)虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

sum = lambda a, b: print(a+b)
sum(1, 2)

4.return语句 

  • 用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。
def test():
    pass


print(test())  # None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值