Python函数、高级语法和用法-1.什么是python函数以及定义一个函数函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重
1. 什么是python函数以及定义一个函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
def function(param):
pass
return 'this is function'
result = function('param')
print(result)
2. 函数使用
参数说明:参数 函数里面参数:行参 调用函数里面参数:实参
函数返回多个结果,优雅的接受参数
def function1(param1, param2):
param1 = param1 * 3
param2 = param2 * 2 + 20
return param1, param2
param1, param2 = function1(2, 3)
print(param1)
print(param2)
指定参数(无参、必须参数、指定实参、默认参数、可变参数)
def function1():
print(' 没有参数 ')
print('无参无return返回结果:' ,function1())
param1,param2 = function1(param2 = 4, param1 = 2)
print(param1, param2)
def function1(param1=4, param2=4):
param1 = param1 * 3
param2 = param2 * 2 + 20
return param1, param2
param1,param2 = function1()
print(param1, param2)
def function2(*param):
print(param)
function2((1,2,3))
function2(*(1,2,3))
def function3(**param):
print(param)
print(type(param))
function3(x=1, y=2, z=3)
function3()
这里需避坑
def function3(param1, *param3, param2=2):
print('必须参数:', param1)
print('可变参数:', param3)
print('默认参数:', param2)
function3('str', 1, 2, 3, 'param')
function3('str', 1, 2, 3, param2='param')
3. Python 函数式编程
函数本身可以赋值给变量(即变量可以指向函数)。而其实函数名本身就是指向函数的变量。
一个函数可以接受另一个函数作为参数。这种函数称为高阶函数,例如以下几个例子:
3.1 lambda 表达式 - 匿名函数
function = lambda x, y: x + y
print(function(1,2))
3.2 map与lambda
map函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回。
arr = [1, 2, 3, 4, 5, 6, 7, 8]
def square(x):
return x * x
result = map(square, arr)
print(list(result))
result1 = map(lambda x: x * x, arr)
print(list(result1))
arr1 = [1, 2, 3, 4, 5, 6]
result2 = map(lambda x, y: x * x + y, arr, arr1)
print(list(result2))
列表推倒式,适用于:list、dict、tuple、set
arr = [1, 2, 3, 4, 5, 6, 7, 8]
result = [x * x for x in arr]
print(result)
result1 = [x * x for x in arr if x >=4]
print(result1)
sex = {
0 : '男',
1 : '女',
2 : '中性'
}
result2 = {value:key for key,value in sex.items()}
print(result2)
3.3 reduce 连续计算数据
使用reduce 引入functools库
from functools import reduce
arr = [1, 2, 3, 4, 5, 6, 7, 8]
result = reduce(lambda x, y: x + y, arr)
print(result)
result1 = reduce(lambda x, y: x + y, arr, 14)
print(result1)
3.4 filter 过滤数据
和map()
类似,filter()
也接收一个函数和一个序列。和map()
不同的时,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素。
arr = [1, 0, 0, 1, 1, 4, 0, 5]
result = filter(lambda x:True if x==1 else False, arr)
print(list(result))
3.5 装饰器
装饰器本质是一个Python函数,它可以让其它函数在没有任何代码变动的情况下增加额外功能。有了装饰器,我们可以抽离出大量和函数功能本身无关的雷同代码并继续重用。经常用于具有切面需求的场景:包括插入日志、性能测试、事务处理、缓存和权限校验等
def decorator(func):
def wrapper(*args, **kwargs):
print(time.time(), args, kwargs)
func(*args, **kwargs)
return wrapper
@decorator
def function(param):
print('function : this is decorator ' + param)
@decorator
def function1(param1, param2):
print('function1 : this is decorator ' + param1)
print('function1 : this is decorator ' + param2)
@decorator
def function2(param1, param2, **kwargs):
print('function2 : this is decorator ' + param1)
print('function2 : this is decorator ' + param2)
print(kwargs)
function('param')
function1('param1' , 'param2')
function2('param1' , 'param2', x=1,y=2,z=3)
4. Python 高级语法和用法
4.1 海象运算符 3.8以上
它的英文原名叫 Assignment Expressions
,翻译过来也就是 赋值表达式
,不过现在大家更普遍地称之为海象运算符,就是因为它长得真的太像海象了。
1.第一个用法:if/else
若在 Python 3.8 之前,Python 必须得这样子写
但有了海象运算符之后,你可以和 Golang 一样(如果你没学过 Golang,那这里要注意,Golang 中的 :=
叫短变量声明,意思是声明并初始化,它和 Python 中的 :=
不是一个概念)
str = 'Python'
if len(str) > 5:
print('str 长度大于5,str长度为:', len(str))
if (x:=len(str)) > 5:
print(f'str 长度大于5,str长度为:{x}')
4.2 枚举
from enum import Enum
from enum import IntEnum,unique
class PEOPLE(Enum):
YELLOW_RACE = '黄种人'
WHITE_PERSON = '白种人'
BLACK_RACE = '黑种人'
DEFULT = 0
@unique
class PEOPLE1(IntEnum):
YELLOW_RACE = 0
WHITE_PERSON = 1
BLACK_RACE = 2
print(PEOPLE.YELLOW_RACE.name, ' : ',PEOPLE.YELLOW_RACE.value)
for item in PEOPLE:
print(item.name, ' : ', item.value)
Enum不仅可以是一个好的枚举也可以拿来代替一些繁琐的类、状态、顺序等东西。比如说:`life = Enum('life', 'born baby teenager adult older die')。