函数
- 函数就是将一段具有独立功能的代码块整合到一个整体并命名
- 在需要的位置调用这个名称 即可完成对应的需求。
- 函数在开发过程中,可以更高效的实现代码重用。
- 先定义 后调用
最简单的函数
# 定义函数
def add_num1():
result = 1+ 2
print(result)
return 123
# 调用函数
add_num1() # 3
# 函数名字是一些指令,存于某个内存地址处
print(add_num1) # <function add_num1 at 0x0000021984453E20>
# 加上括号就是调用
a = add_num1() # 3
# 函数中 return 后边跟的就是 函数返回出来的数据 可以赋值给变量;print()的数据不会返回,只会打印
print(a) # 123
加参数的函数
# 定义函数同时定义了接收用户数据的参数 a和b, a和b是形参
def add_num2(a , b):
result = a + b
print(result)
# 调用函数时传入了真实的数据 10 和 20,真实数据为实参
# 不传参数就会报错
add_num(10,20) # 30
# 位置参数
def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('TOM', 20, '男')
# 关键字参数
def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('Rose', age=20, gender='女')
user_info('小明', gender='男', age=16)
# 默认函数 可以省略填写
def user_info(name, age, gender='男'):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('TOM', 20)
user_info('Rose', 18, '女')
# 您的名字是TOM, 年龄是20, 性别是男
# 您的名字是Rose, 年龄是20, 性别是女
# 您的名字是小明, 年龄是16, 性别是男
# 您的名字是TOM, 年龄是20, 性别是男
# 您的名字是Rose, 年龄是18, 性别是女
# 可变参数
def user_info(*args): # * 将n个位置参数组成元组
print(args)
print(*args) # 拆包
# ('TOM',)
# TOM
user_info('TOM')
# ('TOM', 18)
# TOM 18
user_info('TOM', 18)
def user_info(**kwargs): # ** 将n个关键字参数组合为字典
print(kwargs)
print(*kwargs) # 拆包
# {'name': 'TOM', 'age': 18, 'id': 110}
# name age id
user_info(name='TOM', age=18, id=110)
# 拆包
return_num = (100,200)
num1, num2 = return_num
print(num1) # 100
print(num2) # 200
dict1 = {'name': 'TOM', 'age': 18}
a, b = dict1
# 对字典进行拆包,取出来的是字典的key
print(a) # name
print(b) # age
print(dict1[a]) # TOM
print(dict1[b]) # 18
# 1位置参数 2关键字参数 3默认参数 4可变参数 混合使用时
# 按照上边的1234顺序写
返回值
def add_num1():
return 123
a = add_num1()
print(a) # 123
def add_num1():
# 多个数据返回 逗号分割
return 123,456
a = add_num1()
# 多个数据 会以元组展示
print(a) # (123, 456)
def add_num1():
return 123
return 456
a = add_num1()
# 第一个return 除了返回数据还会终止函数,所以456没有返回
print(a) # 123
函数说明文档
def sum_num(a, b):
""" 求和函数 """
return a + b
help(sum_num)
# Help on function sum_num in module __main__:
#
# sum_num(a, b)
# 求和函数
嵌套函数
def testB():
print('---- testB start----')
print('这里是testB函数执行的代码...(省略)...')
print('---- testB end----')
def testA():
print('---- testA start----')
testB()
print('---- testA end----')
testA()
# ---- testA start----
# ---- testB start----
# 这里是testB函数执行的代码...(省略)...
# ---- testB end----
# ---- testA end----
变量作用域
- 变量作用域指的是变量生效的范围,主要分为两类:局部变量和全局变量。
- 局部变量 所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效。
- 全局变量 所谓全局变量,指的是在函数体内、外都能生效的变量。
- 变量查找顺序,由内到外,从本层开始。
- global 声明全局
def test():
a = 100
print(a)
test() # 100
# print(a) # 报错:name 'a' is not defined
a = 100
def testA():
# 虽然可以找到全局的变量,但是不能修改,修改就相当于在函数里新建一个局部变量
print(a)
def testB():
a = 200
print(a)
def testC():
# 声明a 是全局的变量,此时可以修改这个全局变量
global a
print(a)
# 变量查找顺序。从内到外
testA() # 100
testB() # 200
testC() # 100
print(f'全局变量a = {a}') # 全局变量a = 100
可变类型与不可变类型
- 数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变.
- 查看id和数值,改变数据,但是id不变就是可变
可变类型
- 列表
- 字典
- 集合
不可变类型
- 整型
- 浮点型
- 字符串
递归
def sum_numbers(num):
# 1.如果是1,直接返回1 -- 出口
if num == 1:
return 1
# 2.如果不是1,重复执行累加并返回结果
return num + sum_numbers(num-1)
sum_result = sum_numbers(10)
# 输出结果为6
print(sum_result)
lambda
# lambda 参数列表 : 表达式
# 无参数
fn1 = lambda: 100
print(fn1())
# 一个参数
fn1 = lambda a, b: a + b
print(fn1(1, 2))
# 默认参数
fn1 = lambda a, b, c=100: a + b + c
print(fn1(10, 20))
# 可变参数
fn1 = lambda *args: args
print(fn1(10, 20, 30))
fn1 = lambda **kwargs: kwargs
print(fn1(name='python', age=20))
# 应用1
fn1 = lambda a, b: a if a > b else b
print(fn1(1000, 500))
# 应用2
students = [
{'name': 'TOM', 'age': 20},
{'name': 'ROSE', 'age': 19},
{'name': 'Jack', 'age': 22}
]
# 按name值升序排列
students.sort(key=lambda x: x['name'],reverse=False)
print(students)
高阶函数
- 把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。
- 函数式编程就是指这种高度抽象的编程范式。
map
- map(func, lst),将传入的函数变量func作用到lst变量的每个元素中,
- 并将结果组成新的列表(Python2)/ 迭代器(Python3)返回。
list1 = [1, 2, 3, 4, 5]
def func(x):
return x ** 2
result = map(func, list1)
print(result) # <map object at 0x0000013769653198>
print(list(result)) # [1, 4, 9, 16, 25]
reduce
- reduce(func,lst),其中func必须有两个参数。
- 每次func计算的结果继续和序列的下一个元素做累积计算。
import functools
list1 = [1, 2, 3, 4, 5]
def func(a, b):
return a + b
result = functools.reduce(func, list1)
print(result) # 15
filter
- filter(func, lst)函数用于过滤序列
- 只要符合条件的
- 过滤掉不符合条件的元素,
- 返回一个 filter 对象。
- 如果要转换为列表, 可以使用 list() 来转换。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(result) # <filter object at 0x0000017AF9DC3198>
print(list(result)) # [2, 4, 6, 8, 10]
标签:函数,python,age,基础,----,print,def,name
From: https://www.cnblogs.com/fhy-blog/p/16623923.html