函数
传参
def hello(a,b,c):
print(a,b,c)
1位置传参
hello(a,b,c) #正确
#错误
hello(a,b)
hello(a,b,c,d) #参数不能多不能少
2关键字传参
hello(a=1,b=2,c=3)
hello(b=2,a=1,c=3) #都正确
#直接通过形参名称赋值,顺序无关,同样不能多或少
3序列传参
#可通过list、tuple、str传参
hello(*list)
hello(*tuple)
hello(*str) #加星号
4字典传参
#特别注意,字典的键名一定要与形参名一致,键名要为字符串且不能多或少
d={"a":1,"b":2,"c":3}
hello(**d) #双星号
不定长参数
1)星号元组形参
2)双星号字典形参
星号元组形参
def func(*args): #序列传参和字典传参都是使用时加星号
print(len(args)) #这里定义时加星号,args为一个元组
x=1
for i in args:
print(x," ",i)
x+=1
func(1,2)
func("first",2,"third") #都正确
命名关键字形参
def func(a,b,*,c,d):
def func(a,b,*args,c,d) #c,d为关键字形参
func(1,2,c=1,d=2) #ok
func(1,2,3,5) #error
#*args之后的参数要用关键字传参,args是元组,可理解为后面的参数用关键字来识别
双星号字典形参
def func(**args): #把args当作字典
pirnt()
func(name="123",age=15) #ok
func(1,2,3) #error
func(name="123",15) #error
函数定义时双星号字典形参需要写在星号元组形参前面
三个强大的内置函数
map()
map(func , *iterable) #func是一个函数
#iterable是一个可迭代对象
list1=[1,2,3,4,5]
def add(x):
return 1+x
mit=map(add,list1) #返回值为map的位置
for i in mit: #mit变成了一个可迭代对象
print(i,end=' ') #[2,3,4,5,6]
print()
print(list1) #[1,2,3,4,5]
map()的作用是把可迭代对象里的每个对象依次取出进行func操作然后返回
reduce()
reduce(func,*iterable [,initializer])
from functools import reduce #需引入
list1=[1,2,3,4,5]
def add(x,y):
return x+y
print(reduce(add,list1)) #返回值为累积的结果
reduce()将可迭代对象里的所有元素都进行func操作,(func参数数目为2)第一次取两个元素进行func操作,然后取第三个与第一次func的结果进行func操作
filter()
filter(func,iterable)
list1=[1,2,3,4,5]
def fx(x):
return x%2==1
list2 = [i for i in filter(fx,list1)] #得出筛选结果
print(list2)
filter()作用是进行筛选,选出func为真的元素,直接print(filter)结果为filter的位置,用for来得到筛选结果,结果是新生成的对象,原来的对象依然存在
sorted()
sorted(iterable,key=None,reverse=False)
#key为排序依据 key=abs/len表示依据绝对值/长度排序
reverse=False为升序
匿名函数
匿名函数功能简单,不浪费空间
匿名函数内只能写表达式,即return后面的内容且匿名函数自带return
采用lambda而非def
func = lambda x,y : x+y
print (func(1,2)) #3
模块Module
模块是一个文件,以.py结尾
py中的全局变量只在模块中存在
import 模块1 [as 别名],模块2 [as 别名] #引入
import math
print(math.sin(10)) #用math.sin
help(obj) #查看模块文档字符串,理解为查看所有对象与作用
dir(obj) #查看模块所有属性的字符串列表
from 模块名 import 模块属性 #导出一个属性
from math import sin
from math import sin #可直接使用sin
print(sin(10))
包
将一系列模块进行分类管理