1. 函数: ----- def
代码模块
面向过程:
------- 买电脑 (需求 --- 电脑商城 --- 看配置 --- 谈价 --- 购买)
函数就是完成特定功能的代码的集合(模块),这组代码可以作为一个单位使用,并且给他取一个名字。
# 可以通过函数名在程序的不同地方多次执行(函数执行)
(1)降低编程的难度。
通常将一个复杂的大过程分解成n个小过程(通过函数实现),然后将小过程划分成更小的过程,
当过程细化为足够简单时,我们就可以分而治之。各个小过程解决了,大过程就迎刃而解了。
(2)代码复用
避免重复编写某段代码,提高效率。
2. 定义函数: def
def 函数名():
函数的逻辑代码
函数名禁止用中文命名
3.使用函数: 调用 调用才能实现函数的相应功能
函数名() 不加括号调用不了函数,但是能代表一个函数
def ex():
print('这是一个函数')
ex()
4.函数名定义规则:
1.只能是一个词。
2.只能包含字母、数字、和下划线。
3.不能以数字开头。
4.不可以使用关键字(重名)
5.取名尽量有意义---见名思意
5. 函数中的 return 和 pass
--------- return:返回值 ---- 将指定数据从函数内部返回
--------- pass: 保证格式完整,避免语法错误 一旦写入程序就要删除pass 函数中不写内容会报错,出现格式错误,强制终止
def func():
return 123
def func1():
print(123)
print(func1())
# 123
# None 表示返回值为空,因为没有返回值
print(func())
#123
6.函数参数 ---- 传参
------- 必备参数
------- 默认参数 传入的时候有默认值,传入值的时候改变默认参数,同时存在时,必备参数在前,默认参数在后,与传参的顺序有关
------- 不定长参数 ---- 不定长参数可以不收数据 不限制参数的长度
*args:接收各种类型数据, 除了键值形式(a=1)
**kwargs:只接收键值形式(a=1)
def demo(a):#a就是必备参数,缺少会报错
print(a)
demo(2)
#2
def func1(n=1):#n为默认参数
print(n)
func1()
func1(123)#123 可以改变默认参数的值
#1
def func2(num,a=1):
print(num)
print(a)
func2(3)
#3
#1
def func3(a,b):
print(a)
print(b)
func3(a=3,b=4)#指定性传参,目的性很强
#3
#4
def demo2(*args,**kwargs):
print(args)#(1, 'ok', [1, 2], {1: 'yes'})
print(kwargs)#{'c': 23, 'd': 9}
demo2(1,'ok',[1,2],{1:'yes'},c=23,d=9)#只能对应传数据
# demo2(1,'ok',[1,2],c=23,{1:'yes'},d=9)#会报错
def demo3(a,b=2,*args,**kwargs):
print(a)
print(b)
print(args)
print(kwargs)
demo3(2,1)
# 2
# 1
# ()
# {}
7.常见函数
8.内置对象的查看 --- dir()
查看指定的数据或者对象有什么方法
9.高级内置函数
------ enumerate: 返回一个枚举对象 针对序列类型 可迭代对象
------ eval: 取出字符串里面的内容,将str里面有效的表达式,来进行返计算回结果
------ exec: 执行编译过后的字符串
------ filter: 过滤器 筛选想要的对象
------ map(fuction, iterable): 对iterable里面的每个元素都应用fuction函数
------ zip : 配对 针对字典数据
list1 = [1,'ok',3,'kkk']
s = enumerate(list1)
print(s)#<enumerate object at 0x000002D2CC666DB8>生成一个枚举对象
for i in s:
print(i)
#(0, 1)
# (1, 'ok')
# (2, 3)
# (3, 'kkk')
data = list(s)
print(data)#[(0, 1), (1, 'ok'), (2, 3), (3, 'kkk')]
a = '1+2+3'
print(a)#1+2+3
print(eval(a))#6
b = 'we s s'
# print(eval(b))#报错,必须是有效表达式
c = 12
d = 24
e = 'sum = c+d'
print(e)#sum = c+d
exec(e)
print(sum)#36
def func(x):
return x>5
list2= [i for i in range(10)]
print(func(6))#True
f_list = filter(func,list2)
print(f_list)#<filter object at 0x000001F8E1DFACC8>返回一个过滤器对象
list3 = list(f_list)
print(list3)#[6, 7, 8, 9]
def func1(y):
if y>5:
return y*2
list4= [i for i in range(10)]
f_list = filter(func1,list4)
list5 = list(f_list)
print(list5)#[6, 7, 8, 9]
#只进行筛选,筛选出来是什么,返回的就是是什么,不会改变值
def func2(k):
if k<5:
return k#返回的是一个bool值,不会返回0
list6= [i for i in range(10)]
f_list = filter(func2,list6)
list7 = list(f_list)
print(list7)#[1, 2, 3, 4]
def demo(x):
return x*10
list8 = [i for i in range(7)]
s = map(demo,list8)#数据必须是可迭代数据
print(s)#<map object at 0x0000029B113BA288>生成的是一个map对象,要查看里面的内容要转类型
list9 = list(s)
print(list9)#[0, 10, 20, 30, 40, 50, 60]
list10 = ['ok','yes','no']
list11 = ['可以','是的','不']
a = zip(list10,list11)
print(a)#<zip object at 0x000001A4EE89A688>生成一个对象
print(dict(a))#{'ok': '可以', 'yes': '是的', 'no': '不'}也可以直接进行操作
#数据被操作一次后就不能再进行操作
print(list(a))#[]
# list12 = list(a)
# print(list12)#[('ok', '可以'), ('yes', '是的'), ('no', '不')]
# print(dict(list12))#{'ok': '可以', 'yes': '是的', 'no': '不'}
#可以直接转换成字典,有对象就配对,没有就不配
10. 迭代对象
------ iter: 创建迭代器对象
------ next:去对象取值 一次取一个 取了之后在对象里就没了
list1 = ['yes','ok','no']
obj = iter(list1)#将列表转换成一个列表迭代器对象
print(obj)#<list_iterator object at 0x00000242E2F21E48>
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))#报错,没有对象可取
#yes
# ok
# no
?
|