本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一,函数基础
1,什么是函数?函数是实现了某一种特定功能的对象
2,type,id,dir,help,set,list,str,tuple,dict都是函数,实现了特定的功能。
append,add,pop,remove,sort这些都是方法,使用要时前面要加点!
3,函数和方法的区别:
4,创建一个函数所必备的东西:
5,函数命名:可以是大小写字母,下划线,数字,函数名为了规范不要用大写字母
- 函数名不要取的太特殊,应该见名知意,不要和内置函数重名!!!
6,return 作用:1,返回后面的对象 2,结束函数的调用
- 如果你要让函数执行后,有结果返回给你,那么就必须要用return
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5F7ydwHz-1667715123701)(D:\python\python思维导图和笔记\python入门基础\8,函数基础和函数参数\笔记辅图\1546606902559.png)]
二,函数参数
- 函数定义参数,必备参数在前,默认参数在后,不定长参数在最后!!!!!!!!!!!
1,必备参数:必须要传入参数
>>> def hello(s): # s是参数,s接受任何参数!!
print('hello {}'.format(s))
>>> hello(xinyibin) # 调用函数时必须写参数!!!
>>> 'hello xinyibin'
2,默认参数:默认设置了参数值的参数,调用函数可以给值,也可以不给,不给就用默认
>>> def add(a=1,b=2): # 默认a,b已经设置了参数
return a + b
>>> add() # 可以不给参数,函数就会使用默认参数
3
>>> add(2,6) # 给了参数的话就用给的参数运行
8
3,不定长参数:传入不指定个数的参数,10个,20个,30个....n个都行!
>>> def values(*args): # 参数接受任何参数,输入什么,输出什么
print(*args) # 这里的*args具有解包的效果
>>> values(666,777,(1,2,3))
666 777 (1,2,3)
>>> def values(*args): # 参数接受任何类型,会把数据打包成元组
print(args)
>>> values(666,777,888,{666})
(666,777,888,{666})
>>> def values(**kwargs): # 参数只接收关键字传参,会把数据打包成字典
print(kwargs)
>>> values(a=1,b=2)
{'a': 1, 'b': 2}
>>> def values(a,b,c):
print(a,b,c)
>>> values(**{'a'=1,'b'=2,'c'=3}) # 解包!!!!!!!!!
1 2 3
>>> values(*(1,2,3))
1,2,3
>>> def s1(*a):
print(*a)
>>> s1(*(1,2,3)) # 多个数据解包!!!
1 2 3
>>> s1(*{'a':1,'b':2,'c':3})
a b c
>>> def values(*args,**kwargs): # 可以传参,也可以不传参,普通传参和关键字传参要区分
print(args,kwargs) # *要写**前面!!注意规范
>>> values(1,2,3,a=1,b=2,c=3)
(1, 2, 3) {'a': 1, 'b': 2, 'c': 3}
4,传参方式
- 位置传参
>>> def values(a,b,c): # 定义一个必备参数
print(a,b,c)
>>> values(1,2,3) # 函数根据参数的位置对应输出值
1 2 3
- 关键字传参
>>> def values(a,b,c): # 定义一个必备参数
print(a,b,c)
>>> values(c=3,b=2,a=1) # 函数根据关键字a,b,c的位置输出值
1 2 3
5,定义一个什么类型都有的函数
>>> def values(a,b=None,*args,**kwargs):
print(a,b,args,kwargs)
# 结果一目了然
>>> values(1,2,3,4,5,6,g=666,v=666)
1 2 (3, 4, 5, 6) {'g': 666, 'v': 666}
三,常见的内置函数
1,查看python的内置函数:
>>> dir(__builtins__) # 会打印出所有的内置函数
2,了解就行的函数,带()掌握
# 常见函数
print() 内置end=\n的默认参数,打印内容之后会换行,可以修改!
input() 获取用户输入,不论输入什么,输出的都是字符串
len() 求长度(掌握)
sum 求和
min 求最大值
max 求最大值
sorted 排序(不会修改对象本身)
reversed 反向(不能用肉眼观察,可迭代,不会修改本身,可以用类型转换成列表观察)
# 进制转换函数
bin 转换为二进制
oct 转换成八进制
hex 转换成十六进制
ord 字符转Ascall码
chr Ascall码转字符
3,Python里的高级内置函数
- eval 能把字符串转换成代码执行(只能执行超级简单的代码,不能执行赋值,创建空间)
- exec 能够把任何字符串转换成代码执行
>>> eval('print("hello world!")') # 执行简单代码
hello world!
>>> exec('for i in range(3):print(i)') # 执行复杂代码
0
1
2
总结:不推荐在开发里面使用,数据不安全!!(了解即可)
- zip 把数据进行配对(等长的容器),返回一个可迭代对象(爬虫)
- enumerate 把数据和编号匹配,返回一个可迭代对象
>>> s = ['男1','男2','男3']
>>> s1 = ('女1','女2','女3')
>>> zip(s,s1)
<zip object at 0x000001FBA5B27D08> # 返回可迭代对象,不可见
>>> list(zip(s,s1))
[('男1','女1'), ('男2','女2' ), ('男3','女3')]
>>> s = ['男1','男2','男3']
>>> list(enumerate(s))
[(0, '男1'), (1, '男2'), (2, '男3')] # 输出数据和编号
总结:zip是把等长的容器匹配,转换成可迭代对象,enumerate是把容器的值和编号匹配,并且一次只能匹配一个容器!。
- map 接受两个对象,第一个参数是函数对象,不是函数调用,第二个参数是可迭代对象,把第二个参数里面数都调用第一个函数一遍,输出一个可迭代对象
- filter 过滤器:返回一个过滤后的可迭代对象,根据函数返回值的真假来返回一个可迭代对象
>>> s = map(str,[1,2,3]) # 依次执行 str(1),str(2),str(3)
>>> list(s)
['1', '2', '3']
>>> s = list(map(bin,[1,2,3])) # 例子
>>> s
['0b1', '0b10', '0b11']
>>> def hello(x):
return False
>>> print(list(filter(hello,[1,2,3])))
[]
s = lambda a: type(a) is int
y = [1, 2, '3', 'f', 4]
print(list(filter(s, y)))
# --->输出: [1, 2, 4]
# filter会把[1,2,3]中的元素当做参数,传入hello中,然后会根据hello返回的真假性,来确定当前传入hello函数的参数要不要保留