python 基础
Python基础
三元运算(三目运算),是对简单的条件语句的缩写。
# 书写格式 result = 值1 if 条件 else 值2 # 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量
set
set集合,是一个无序且不重复的元素集合
add-----添加元素 # st = {"ale","liu","nuh","koi"} # st.add("sdf") # print(st) clear-----清除列表 # st = {"ale","liu","nuh","koi"} # st.clear() # print(st) difference----查找st中有的,ss没有的 # st = {"ale","liu","nuh","koi"} # ss = {"alex","ale","nuh","ds"} # print(st.difference(ss)) # # {'koi', 'liu'} difference-update----找到A中有的B中没有的,并更新自己 # st = {"ale","liu","nuh","koi"} # ss = {"alex","ale","nuh","ds"} # st.difference_update(ss) # print(st) # # {'liu', 'koi'} discard---移除指定元素,不存在不会报错 # st = {"ale","liu","nuh","koi"} # st.discard("liu") # print(st) # {'nuh', 'ale', 'koi'} intersection--------交集,找出两个都有的 # st = {"ale","liu","nuh","koi"} # ss = {"alex","ale","nuh","ds"} # ret = st.intersection(ss) # print(ret) intersection-update----交集,找出两个相同的并更新st # st = {"ale","liu","nuh","koi"} # ss = {"alex","ale","nuh","ds"} # st.intersection_update(ss) # print(st) {'nuh', 'ale'} isdisjoint 如果没有交集返回True,如果有交集返回Fales # st = {"ale","liu","nuh","koi"} # ss = {"alex","ale","nuh","ds"} # print(st.isdisjoint(ss)) # # False issubset-------是否是子序列 # st = {"ale","liu","nuh","koi"} # ss = {"ale","nuh",} # print(ss.issubset(st)) # True issuperset----是否是夫序列 # st = {"ale","liu","nuh","koi"} # ss = {"ale","nuh",} # print(st.issuperset(ss)) # True pop-------删除随机元素 # st = {"ale","liu","nuh","koi"} # st.pop() # print(st) remove-----删除指定元素 # st = {"ale","liu","nuh","koi"} # st.remove("ale") # print(st) # # {'koi', 'liu', 'nuh'} symmetric_difference----对称交集,打印两个集合中不同的元素 # st = {"ale","liu","nuh","koi"} # ss = {"alex","ale","nuh","ds"} # print(st.symmetric_difference(ss)) # {'liu', 'koi', 'ds', 'alex'} symmetric_difference_update----对称交集,并更新st # st = {"ale","liu","nuh","koi"} # ss = {"alex","ale","nuh","ds"} # st.symmetric_difference_update(ss) # print(st) # {'koi', 'alex', 'ds', 'liu'} union------并集,把两个变量合起来 # st = {"ale","liu","nuh","koi"} # ss = {"alex","ale","nuh","ds"} # print(st.union(ss)) # {'ale', 'koi', 'alex', 'nuh', 'liu', 'ds'} update------更新 # st = {"ale","liu","nuh","koi"} # sk = {"ala"} # st.update(sk) # print(st) # {'koi', 'ale', 'liu', 'ala', 'nuh'}
一、数字和字符串
对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址
import copy # ######### 数字、字符串 ######### n1 = 123 # n1 = "i am alex age 10" print(id(n1)) # ## 赋值 ## n2 = n1 print(id(n2)) # ## 浅拷贝 ## n2 = copy.copy(n1) print(id(n2)) # ## 深拷贝 ## n3 = copy.deepcopy(n1) print(id(n3))
二、其他基本数据类型
对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。
1、赋值
赋值,只是创建一个变量,该变量指向原来内存地址,如
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} n2 = n1
2、浅拷贝
浅拷贝,在内存中只额外创建第一层数据
import copy n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} n3 = copy.copy(n1)
3、深拷贝
深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)
import copy n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} n4 = copy.deepcopy(n1)
在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下:
while True: if cpu利用率 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘使用空间 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 内存占用 > 80%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接
腚眼一看上述代码,if条件语句下的内容可以被提取出来公用,如下:
def 发送邮件(内容) #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 while True: if cpu利用率 > 90%: 发送邮件('CPU报警') if 硬盘使用空间 > 90%: 发送邮件('硬盘报警') if 内存占用 > 80%:
对于上述的两种实现方式,第二次必然比第一次的重用性和可读性要好,其实这就是函数式编程和面向过程编程的区别:
- 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
- 面向对象:对函数进行分类和封装,让开发“更快更好更强...”
函数式编程最重要的是增强代码的重用性和可读性
二、定义和使用
def 函数名(参数): ... 函数体 ... 返回值
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据。
1、返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
以上要点中,比较重要有参数和返回值
def 发送短信(): 发送短信的代码... if 发送成功: return True else: return False while True: # 每次执行发送短信函数,都会将返回值自动赋值给result # 之后,可以根据result来写日志,或重发等操作 result = 发送短信() if result == False: 记录日志,短信发送失败...
2、参数
为什么要有参数?
函数的有三中不同的参数:
- 普通参数
- 默认参数
- 动态参数