python笔记(6):函数基础和函数参数

185 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一,函数基础

​ 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(666777,(1,2,3))
666 777 (1,2,3)


>>> def values(*args):			# 参数接受任何类型,会把数据打包成元组
		print(args)
>>> values(666777,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函数的参数要不要保留