函数
函数是组织好的,主要是为了重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,叫做自定义函数
格式:
def 函数名(参数列表):
函数体
举例
# 函数定义x+y的值
def func(x, y): # 函数名
# 函数体
print(f"{x}+{y}={x + y}")
# 调用
func(1, 2)
func(2, 2)
func(10, 2)
函数不调用是不执行的
返回值
def func1(x, y):
return x + y
#调用
num = func1(5, 5)
print(f"func1返回{num}")
说明文档
使用hepl函数可以把函数的注释打印出来
def func1(x, y):
"""
方法说明文档
:param x:
:param y:
:return:
"""
return x + y
函数嵌套
def func1():
print("func1===================")
def func2():
func1()
print("func2===================")
# 调用
func2()
局部变量
局部变量是定义在函数体内部的,外部是无法访问的,只能在函数体内部生效,只是临时保存数据的,函数执行完毕之后将立即销毁
def func1():
# 局部变量定义
num = 1
print(f"num={num}")
全局变量
全局变量在函数体内部和外部都是可以访问的
# 全部变量定义
num = 1
def func1():
print(f"num={num}")
func1()
print(num)
全局变量在函数体内修改方式
def func1():
# 修改全局变量
global num
num = 100
print(f"num={num}")
func1()
print(num)
函数参数传递
# 函数参数传递
def func1(num1, num2):
"""
:param num1: 定义的num1为形参
:param num2: 定义的num2为形参
:return:
"""
print(f"num1={num1},num2={num2}")
# 3,4就是传递的实参
func1(3, 4)
多返回值
多返回值可以返回元组,序列,字典,集合等
# 多返回值
def func1():
return {"no": 1, "name": "zhangsan"} # 返回字典
def func2():
return {1, 2} # 返回集合
def func3():
return [1, 2] # 返回列表
def func4():
return (1, 2) # 返回元组
# 3,4就是传递的实参
print(func1())
print(func2())
print(func3())
print(func4())
参数无序传递
打乱传递的参数顺序,函数调用时,如果有位置参数时,位置必须在关键字参数的前面,单关键字参数之间不存在先后顺序
# 打乱传递的参数顺序
def func1(name, age, sex):
print(f"name={name},age={age},sex={sex}")
func1(age=18, name="zhangsan", sex="女")
缺省参数
缺省参数就是有默认值的参数,在调用时可以不用省略不用传递,但是所有的参数必须写在缺省参数的前面
# 缺省参数
def func1(name, age, sex="女"):
print(f"name={name},age={age},sex={sex}")
func1(age=18, name="zhangsan")
可变参数
可变参数用于不确定调用的时候会传递多少个参数,此时,可用包裹位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便,不过接受的类型都是元组格式
# 缺省参数
def func1(*args):
print(args)
func1("zhangsan", 18)
关键字可变参数传递,接受的是字典类型
def func1(**kwargs):
print(kwargs)
func1(name="zhangsan", age=18, sex="男")
元组拆包
def func1(*args):
return args
x,y,z = func1(1,2,3)
print(x)
print(y)
print(z)
字典拆包
# # 缺省参数
def func1(**kwargs):
return kwargs
dict1 = func1(name="zhangsan", age=18, sex="男")
#拆出来的都是key值
key1, key2, key3 = dict1
print(dict1[key1])
print(dict1[key2])
print(dict1[key3])
可变和不可变类型
可变数据类型:进行修改数据之后计算机不会重新分配内存地址。
列表,字典,集合都属于可变数据类型
不可变数据类型:修改值之后计算机会重新分配内存地址
整型,浮点型,字符串,元组
实例,使用id函数可以查看内存地址
# 可变数据类型
list1 = [1, 2, 3]
list2 = list1
print(id(list1))
print(id(list2))
list1[0] = 12
print(id(list1))
print(id(list2))
print("=========================")
# 不可变类型
x = 1
print(id(x))
x = 15
print(id(x))
作者:阿超
原创公众号:『Python日常笔记』,专注于 Python爬虫等技术栈和有益的程序人生,会将一些平时的日常笔记都慢慢整理起来,也期待你的关注和阿超一起学习,公众号回复【csdn】优质资源。