2022年最新Python大数据之Python基础【六】函数

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

print(tuple1 + tuple2) # (1, 2, 3, 4, 5, 6)

由于元组内部元素不能修改,索引相加肯定没有对源数据产生影响,而是生成了新的数据

set

set1 = {1, 2, 3}

set2 = {4, 5, 6}

# TypeError: unsupported operand type(s) for +: ‘set’ and ‘set’

# set之间不能进行加法运算

print(set1 + set2)

dict

TypeError: unsupported operand type(s) for +: ‘dict’ and ‘dict’

dict 类型间不能进行加法运算

dict1 = {‘name’: ‘小明’}

dict2 = {‘age’:18}

print(dict1 + dict2)

结论: 基础数据类型都可以进行加法运算,容器类型间只有列表,元组,字符串可以进行加法运算

不同容器类型间可以相加么?

list1 = [1,2,3]
tuple1 = (1,2,3)
set1 = {1,2,3}
dict1 = {‘name’: ‘xiaoming’}

TypeError: can only concatenate list (not “tuple”) to list

print(list1 + tuple1)

TypeError: can only concatenate list (not “set”) to list

print(list1 + set1)

TypeError: can only concatenate tuple (not “set”) to tuple

print(tuple1 + set1)

结论,数据类型布偶无法进行加法运算(特指容器类型之间)


* `*`
	+ 基础数据类型(int float bool)都可以进行乘法运算
	+ 容器类型只能和int类型数据进行乘法运算
	+ 容器类型进行乘法运算,就是将容器复制指定次数,并进行拼接



* 效果是设么?

* 什么容器类型可以使用*

基础数据类型 int float bool都可以使用*法运算

print(12.1 * 2)

容器类型的乘法运算

格式: 容器类型 * int类型数据

乘法运算的 效果,就是讲容器类型复制指定次数,并拼接到一起

list 可以使用*法运算么? 可以

list1 = [1, 2, 3]

将list1 复制3次并进行拼接

print(list1 * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]

使用list 类型乘以float类型可以实现么?

TypeError: can’t multiply sequence by non-int of type ‘float’

乘法运算不能让容器与非int类型相乘

print(list1 * 1.3)

list 能乘以负数么? 可以相乘,但是结果为空列表

print(list1 * -3) # []

可以与0 相乘,结果为空列表

print(list1 * 0) # []

tuple 可以使用*法运算么? 可以

tuple1 = (1, 2, 3, 4)
print(tuple1 * 2) # (1, 2, 3, 4, 1, 2, 3, 4)

tuple 只能与int类型相乘

set可以使用 * 法运算么? 不可以

set1 = {1, 2, 3}

TypeError: unsupported operand type(s) for *: ‘set’ and ‘int’

集合类型数据不能做乘法运算

print(set1 * 3)

dict 能够使用 * 法运算么? 不可以

dict1 = {‘name’: ‘jack’}

TypeError: unsupported operand type(s) for *: ‘dict’ and ‘int’

字典不能做乘法运算

print(dict1 * 3)

乘号左右两侧的数据可以互换位置么? 可以

print(3 * list1) # [1, 2, 3, 1, 2, 3, 1, 2, 3]


* `in`和`not in`
	+ 判断元素是否在数据序列当中
	+ 字符串,列表,元组,集合 ,字典都可以使用



in 判断元素是否存在于容器当中

list1 = [1, 2, 3]
tuple1 = (1, 2, 3)
set1 = {1, 2, 3}

print(3 in list1) # True
print(3 in tuple1) # True
print(3 in set1) # True

如果要判断是否在set当中,要注意被判断的元素必须可以保存在set当中,如果是列表,字典,集合,则不能判断

print([1, 2] in list1) # False 可以判断,引为[1,2] 可以保存在list1当中

print([1, 2] in set1) # TypeError: unhashable type: ‘list’ 不能判断,因为[1,2]不能保存到set1当中

str类型可以使用in么? 可以

str1 = ‘123’

TypeError: ‘in ’ requires string as left operand, not int

字符串判断时,左侧的元素只能是字符串类型,否则报错

print(1 in str1)

print(‘1’ in str1) # True

dict 是否可以使用in???

dict1 = {‘name’: 123}

dict使用in判断的是当前元素是否是dict中存在的键

print(123 in dict1) # False
print(‘name’ in dict1) # True

如果使用此方法则不能判断字典 列表 集合

TypeError: unhashable type: ‘list’

print([1,2] in dict1)

not in : 所有用法和in相同,只是取反而已

结论:

1.使用in 和not in 被判断的元素在关键字左侧, 数据序列在关键字右侧

2.如果想要判断该元素是否在容器内,该元素必须能保存到容器内,比如集合不能保存列表,字典,集合 所以就不能判断其类型的元素是否在集合内

3.字典判断的是元素是否在keys内,也就是是否是其中的键


* 切片
	+ 通过切片按照规则获取数据序列中的一部分元素
	+ tuple list str 可以使用切片
	+ dict set 不可以使用切片



切片:通过切片方法可以按照一定规则截取容器的一部分数据

str切片

str1 = ‘abcde’

格式:[起始位置:终止位置:步长]

不会修改原有字符串,而是产生了一个新的字符串

print(str1[2:]) # cde

list可以切片么?

list1 = [1, 2, 3, 4]

list切片方式方法和str完全相同

list切片后不会在原有数据上进行修改,而是产生了一个新的列表

print(list1[1:3:1]) # [2, 3]
print(list1)

tuple 可以切片么?

tuple1 = (1, 2, 3, 4)

tuple1切片方式方法和str完全相同

切片后不会在原有数据上进行修改,而是产生了一个新的列表

print(tuple1[1:3:1]) # (2, 3)
print(tuple1)

dict可以切片么? 肯定不行,因为不能使用索引获取数据

set 可以切片么? 肯定不行,因为不能使用索引获取数据

结论:

1.list str tuple 可以使用切片,格式是:[起始位置:终止位置:步长],三者使用方式完全一致

2.所有的切片都不会在原有的数据上进行修改,而是产生一个新的数据序列

3.集合和字典无法切片,因为不能使用索引获取数据元素


### 2、公共函数


* len :获取容器内元素个数
* del:删除容器内元素
* max :获取容器内数据的最大值
* min : 获取容器内元素的最小值
* enumerate : 获取容器内元素时可以携带序号
* range:根据一定规则获取整数序列



len 获取容器类型的元素个数, 或者说获取容器的长度

str1 = ‘123’
list1 = [1, 2, 3]
tuple1 = (1, 2, 3)
set1 = {1, 2, 3}
dict1 = {‘name’: 123, ‘age’: 18}

使用len可以获取list str tuple set中的元素个数

print(len(str1))
print(len(list1))
print(len(tuple1))
print(len(set1))

使用len可以获取dict中的键值对的个数

print(len(dict1))

len() 可以写成 容器.__len__()

print(list1.len())

del

删除容器内指定的元素

list

del list1[0]

print(list1)

tuple

del tuple1[0]

TypeError: ‘tuple’ object doesn’t support item deletion

元组内元素不能被删除

print(tuple1)

set

for i in set1:

del i

dict

del dict1[‘name’]

del 在dict中删除的是键值对

print(dict1)

str

TypeError: ‘str’ object doesn’t support item deletion

str 不能够使用del 删除内部元素

注意 :str内部的元素也是不可修改的,类似于元组

del str1[0]

print(str1)

结论:

1.列表,字典可以使用del删除内部元素,但是,列表中是删除元素,字典中是删除键值对

2.使用del 没法循环遍历删除set中的元素,因为引用机制问题

3.str tuple内部的元素都不可更改所以不能使用del删除元素

max min

list tuple set str可以使用max min获取容器内的最大最小值

print(max(list1))
print(max(tuple1))
print(max(set1))
print(max(str1))

dict是使用max和min获取键的最大最小值

print(max(dict1))

enumerate 枚举函数:获取容器内数据时添加序号(默认序号从0开始可以作为索引使用)

list2 = [1, 2, 3, 4, 5, 6, 7, 8]

for i in list2:
print(i)

可不可以同时获取元素的值和元素的索引? 可以 使用enumerate

for i in enumerate(list2):

# 直接打印,获取的是以(索引,值)组成的元组

print(i)

list

for index, value in enumerate(list2):
print(index, value, sep=’ : ')

tuple

for index, value in enumerate(tuple1):
print(index, value, sep=’ : ')

set

for index, value in enumerate(set1):
print(index, value, sep=’ : ')

str

for index, value in enumerate(str1):
print(index, value, sep=’ : ')

dict

for index, value in enumerate(dict1):
print(index, value, sep=’ : ')

结论:所有的容器和课迭代类型都可以使用enumerate,并且产生序号,这个序号并不是索引值,而是在生成序号时默认从0开始,碰巧可以在list,str,tuple中当做索引使用


### 3、推导式


* 列表推导式
	+ 格式:[要插入的值 for 临时变量 in 数据序列 if 条件]
* 集合推导式
	+ 格式:{要插入的值 for 临时变量 in 数据序列 if 条件}
* 字典推导式
	+ 格式:{要插入的键:要插入的值 for 临时变量 in 数据序列 if 条件 }
* 没有元组推导式和字符串推导式,因为其内部元素无法被修改



推导式:通过一定的规则快速构建数据序列

列表推导式

获取从0 到9的数据序列

while

list1 = []
i = 0
while i < 10:
list1.append(i)
i += 1
print(list1)

for

list2 = []
for i in range(10):
list2.append(i)
print(list2)

推导式

格式: [要插入列表的表达式 for 临时变量 in 数据序列]

list3 = [i for i in range(10)]
print(list3)

使用推导式,创建一个从1-100的偶数的数据序列

for

list4 = []
for i in range(1, 101):
if i % 2 == 0:
list4.append(i)

print(list4)

推导式

格式: [要插入列表的表达式 for 临时变量 in 数据序列 if 条件]

list5 = [i for i in range(1, 101) if i % 2 == 0]
print(list5)

练习:

用推导式进行九九乘法表的生成,将所有的算式放入列表中

list6 = []
for i in range(1, 10):
for j in range(1, i + 1):
list6.append(f’{j} * {i} = {j * i}')

print(list6)

改写为推导式:

list7 = [f’{j} * {i} = {j * i}’ for i in range(1, 10) for j in range(1, i + 1)]
print(list7)

集合推导式

集合推导式和列表推导式完全一致,只不过使用推导式时,外层用{}包裹,并且在序列中会去重

set1 = {i for i in range(10)}
print(set1)

获取从1-10 的偶数集合

set2 = {i for i in range(1, 11) if i % 2 == 0}
print(set2)

字典推导式

keys = [‘name’, ‘age’, ‘gender’, ‘id’]
values = [‘xiaoming’, 18, ‘女’, ‘001’]

需求想将key 和value以一对应,形成一个字典

dict1 = {}
for i in range(len(keys)):
dict1[keys[i]] = values[i]

print(dict1)

改写推导式

格式:{要插入的键:要插入的值 for 临时变量 in 数据序列 if 条件}

dict2 = {keys[i]: values[i] for i in range(len(keys))}
print(dict2)

所有的推导式都可以使用for循环改写,所以我们进行推导式的时候先不要急于求成,多改写几次就不用再改写了直接可以写出推导式


### 4、函数介绍


* 函数的定义:


	+ def 函数名(参数):
	
	 ​ 函数体
	
	 ​ return 返回值
* 函数的调用:函数名(参数)



函数: 将特定的功能所对应的代码片段进行打包,封存在一个函数内,如果我们想要重复使用该功能,就直接调用函数即可

函数的作用: 提高代码复用率,提高开发效率,易于维护

‘’’
函数定义的格式:
def 函数名(参数1, 参数2,参数3…):
函数体
return 返回值

函数调用的格式:
函数名(参数1,参数2,参数3…)

函数名:绝大多数函数都有函数名,没有函数名的函数不能被复用

参数:为了让函数灵活性更高,更容易被复用,会动态对函数进行传值,传递的值可以在函数体内部进行使用

函数体: 特定功能的代码,写在函数内部,调用函数时可全部执行

返回值: 写在return之后,将函数内部计算或运行得到的数据传递到函数体外部

‘’’

定义的时候可以不传参,如果不传调用的时候也不用传参

def run():
print(‘我跑的老快了,没人追的上我,钱包在我手里’)
print(‘我跑的老快了,没人追的上我,手机在我手里’)
print(‘我跑的老快了,没人追的上我,女朋友在我手里’)

调用时可以将函数内的代码全部执行一遍

run()
run()


* 函数的调用顺序:从上到下依次执行,先键函数名保存到函数列表中,调用的时候去类表中查询,如果存在则调用其中的代码,如果不存在则报错



NameError: name ‘sing’ is not defined

函数需要先定义后调用否则会报错

sing()

定义一个唱歌方法

def sing():
print(‘我再唱青藏高原’)

定义一个跳舞方法

def dance():
print(‘我再跳广场舞’)

sing()
dance()

执行顺序: 先讲所有函数的函数名执行一遍将其储存到缓存中的方法列表中,后续调用函数时去方法列表中查询,如果函数名存在,则调用函数内部的代码,如果函数名不存在将报错


### 5、函数参数


* 函数的参数可以增加代码的灵活性
	+ 在定义时传入的参数是形参,只能在函数体内部使用
	+ 在调用的时候传入的参数是实参,可以传入到函数体内部被形参接收



定义一个eat方法,通过传入不同的参数,可以输出不同的生物吃不同的食物

def eat_cat():
print(‘猫吃鱼’)

def eat_dog():
print(‘狗吃肉’)

def eat_person():
print(‘人吃藕’)

上述函数定义方法不太方便,因为如果有更多的生物去吃不同的东西,就要重复书写函数不利于函数的复用

改进 >> 传参

通过传入参数,可以控制函数体内部的执行结果发生变化,让函数更加灵活

def eat(who, food): # 在定义时传入的参数叫做形参,只能在函数体内部使用
print(f’{who}吃{food}')

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值