python基础是个什么鬼?
作为初入坑python的小测试,摸黑做个笔记。
变量名的规则
1.变更名是由字母(大小写的A-Z)、数字(0-9)、下划线(_)组成
2.变量名不能以数字开头
3.变量名是区分大小写的
切记!!!!变量名的命名规范:驼峰式命名法
python常见的数据类型
python具备自动生成数据类型的分类功能。测试人员已经熟悉了下面三种基本的数据类型足够多了:
数字:涵盖整数值及具有小数目位的结果,在计算过程中若有小数目参与,则运算所得的结果必定会带有小数目
2.字符串:str()函数用于表示一个字符串值,在编程中无需过多赘述即可理解其用途。可以直接访问链接获取详细信息字符串_百度百科
3.布尔值:通常用于条件判断,并返回True或False的结果。简单的例子包括
bool()函数里面的零值是False,非零值是True
任何非空的字符串转化成布尔值都是True
空值转化为布尔值永远都是False(敲黑板,重点哟)
字符串转化成布尔:
str(True) # 结果是'True'
str(False) # 结果是'False'
str(None) # 结果是'None'
数值转换
在数值数据中,我们可以采用str函数将这些数值转化为对应的字符串形式。例如,在Python编程环境中可以通过调用str函数将这些数值转换为字符串形式,并使用相应的输出语句进行展示。
2.要把一个整数字符串转换为int类型,使用int();int()函数向下取整,int(99)--->输出99
3.要把一个带小数点的字符串转换为float类型,使用float()
注解:在将浮点型数值转换为整数值的过程中,在转换过程中会舍去小数点后的数值,并仅保留整数值部分。因此,在将浮点型数值转换为整数值的过程中这一步骤需要谨慎处理以避免数据失真
4.round()函数,向上取整,且可指定保留小数点后的几位,eg:
round(99.9)--->结果是100
round(3.1415926,2)--->结果是3.14 # 取小数点后的两位
5.布尔值转成int或者float
硬背吧,没有为什么。哈哈哈~~~~
int(True) # 结果是1
int(False) # 结果是0
float(True) # 结果是1.0
float(False)# 结果是0.0
运算符
算数运算符
| 运算符 | 描述 | 栗子 |
|---|---|---|
| + | 加 | 1+1 ; a+b |
| - | 减 | 2-1 ; a-b-c |
| * | 乘 | 2*1,相当于2 x 1 |
| / | 除 | 6/2,相当于6 ÷ 2 |
| // | 取整除 | 9/2, 结果是 2 |
| % | 取模 | 10 % 4,相当于 10 - (10 // 4) × 4 |
| ** | 指数 | 2 ** 3 相当于 2 * 2 * 2,也就是2的3次方 |
| () | 小括号 | 提高运算优先级,比如: (2 + 8) * 2 |
敲黑板:
In division operations, when using the single-slope division operator, even if both the dividend and divisor are integers, the result is still a floating-point number.
对于两个整数的除法运算而言,在其结果不需要高精度小数的情况下,通常采用双斜杠的方式执行计算。这会使得计算结果保持为整数值。
3.所有的运算符两边都有一个空格,这是Python代码的书写规范。
4.我们可以将其视为求余操作。需注意以下几点:当两个数值可被整除时,其结果必然是零;根据定义,该运算可表示为a - \left(\frac{a}{b}\right) \times b;特别地,零既不可作为除数,也禁止参与此类运算。
使用算术运算符操作字符串
加号不仅可以将两个字符串连接为一个整体,还可以依次连接多个字符串
print("字符串1" + "字符串2" + "字符串3")
2.用"*"运算符,表示将该字符串重复几次并拼接成一个字符串:
print("字符串" * 5)
3.不能将字符串与数值一起相加,正确的做法是将数值转化成字符串:
print("字符串" + str(数值))
赋值运算符
| 运算符 | 描述 | 栗子 |
|---|---|---|
| += | 加法赋值运算符 | c += a 相当于c = c + a |
| -= | 减法赋值运算符 | c -= a 相当于c = c - a |
| *= | 乘法赋值运算符 | c *= a 相当于c = c * a |
| /= | 除法赋值运算符 | c /= a 相当于c = c / a |
| //= | 取整除赋值运算符 | c //= a 相当于c = c // a |
| %= | 取模赋值运算符 | c %= a 相当于c = c % a |
| **= | c = a 相当于c = c a |
日常编程中最常用的是加法赋值和减法赋值,eg:初始值是0,每执行一次+1
count = 0
count += 1
count += 1
比较运算符
用来运算布尔值的, 将两个值放在一起比较,最后得到True或者False。
| 运算符 | 描述 | 栗子 |
|---|---|---|
| == | 等于 | 100 == 100 |
| != | 不等于 | 100 != 90 |
| > | 大于 | 100 > 90 |
| < | 小于 | 90 < 100 |
| >= | 大于等于 | 3 >=1 |
| <= | 小于等于 | 8 <= 9 |
逻辑运算符
在判断时经常遇到的情况较为复杂的问题。为了更好地处理这些问题,在编程中我们通常会使用逻辑运算符来将多个比较运算连接在一起。
# 定义两个变量
a, b = 1, 2
a > b and a < b # 判断a > b和a < b为True
a % 2 == 0 or b % 2 == 0 # a % 2 == 0或者b % 2 == 0 ,其中一个成立就判断为True
not a > b # 判断a不大于b,结果为True
流程控制
条件判断
if...else语句
# 把3赋值给num
num = 3
# 通过取模运算num是否能被2整除
if num % 2 == 0:
# num是数值不能直接拼接字符串,所以用str()函数转化成字符串再拼接
print(str(num()) + "是一个偶数")
else:
print(str(num()) + "是一个奇数")
elif
else-if通常紧跟在if判断之后,在else之前使用
# 把59赋值给score
score = 59
# 第一个条件是小于60,判断为不及格
if score < 60:
print("成绩不及格")
# 第二个条件是小于90,判断为及格
elif score < 90:
print("成绩及格")
# 第三个条件,大于90,判断成绩优秀
else:
print("成绩优秀")
if条件嵌套
需求:对60100分的进行更细的划分,6070分为合格,70~90 分为良好,90分以上为优秀。
# 把100赋值给score
score = 100
# 先判断最>=60,里面嵌套三个条件:大于等于60小于70、大于70小于90、大于90
# 最后判断<=60
if score >= 60:
if score < 70:
print("成绩及格")
elif score < 90:
print("成绩良好")
else:
print("成绩优秀")
else:
print("成绩不及格")
与逻辑运算结合
# 把22赋值给age
age = 22
# 判断年龄大于18岁并且小于60岁
if 18 < age < 60:
print("成年人了,搬砖!")
自动类型转换
if和elif后面的每个条件都总是跟着一个表达式。这个表达式的计算结果必须是True或False。如果计算出的结果不是布尔类型,则会被自动转换为布尔值。
记住:0值、None 和空字符串转换为布尔值后都是False
循环
while循环
给自己设定了一个目标,跑完就结束,格式如下
while 循环条件:
循环体
# 执行顺序由上至下
lap = 0
# 循环条件是lap < 10
while lap < 10:
# lap的初始值是0,循环条件是每执行一次加上1
lap += 1
# 循环体,每执行一次打印一次lap+1圈,直到执行完成10次停下来
print("我跑完了第" + str(lap + 1) + "圈")
for循环
该循环结构可被用于访问集合。其中"集合"特指一种具有顺序且支持迭代操作的对象。例如,在编程中常见的例子包括字符串、列表等数据类型。在实际应用中,默认情况下我们可以通过以下步骤实现功能:首先创建一个空列表变量;然后利用for循环依次读取每个元素并进行相应的处理操作。
# 把字符串apple赋值给seq
seq = "apple"
# 判断s在seq内(注意:此时的字符串是apple)
for s in seq:
# 打印s
print(s) #代码执行后输出一次是 a p p l e
嵌套循环
# 需求:在控制台中打印出指定边长的长方形或者正方形图案。
# 指定长方形的宽和高
width, hight = 10, 5
"""
print函数有了第二个参数,end表示在打印完指定的内容后,在结尾再打印一个指定的字符
串,默认每个print语句在结尾会加一个换行符"\n", 传递一个空字符串给它,表示打印完星号以后不再
添加任何输出内容。第二个print函数没有任何参数,那它会输出一个换行符。
"""
# 从上到下开始遍历打印高度和宽度
for i in range(height):
for j in range(width):
print("*", end ="")
print()
break和continue
略过某一次循环或者干脆跳出整个循环
# 需求:使用for循环和continue来打印出10以内的所有奇数相加的式子,并求出它们
的和。
total = 0
for i in range(10):
if i % 2 == 0:
continue
print(i, end = " + ")
total += i
print(" = %s" % total)
# 关键字break用来打断整个循环并跳出。看这个例子,给一个字符串,这个字符串是一个小数,要求打
印出小数的整数部分。
s = "238.9237834829"
for i in s:
if i == '.':
print()
break
print(i, end='')
数据结构
字符串格式化
常用的占位符如下
| 占位符 | 描述 | 栗子 |
|---|---|---|
| %d | 整数占位符 | 给%d传入一浮点数,自动转化成整数: print("%d" % 3.14)--->输出3 print("%d" % 3.99)--->输出3 |
| %f | 浮点数占位符 | print("%f" % 3.14)--->会输出“3.140000”,后面的0是自动补齐的 |
| %.f | 指定精度的浮点数占位符 | print("%.2f")--->会输出3.14 |
| %s | 字符串占位符 | print("%s" % 100) # 输出100 print("%s" % 3.14) # 输出3.14 print("%s" % "python") # 输出python |
| %% | 输出百分号% | 在字符串输出一个百分比,就需要用到%% report = "%d年%s公司营收增长了%.2f%%" % (2019, "某某", 20.28) print(report) |
format函数
除了Python自带的%运算符外,在处理较长的数字时遵循国际通用规则,在数值表示上每隔三位插入一个逗号以增强可读性。例如,在输出一个较长的整数时(如1000000),我们会将其表示为1,000,000以提高可读性,并且这种格式化操作可以通过字符串格式化功能轻松实现。
# 每三位用逗号分隔
'{: ,}'.format(1234567890) #结果 1,234,567,890
字符串的下标和切片
在遍历字符串时:每个索引都以零为起始点运行;当我们需要获取第一个字符时,请确保所使用的索引值为零。
从后往前:可以借助负数索引来实现这种访问方式。这在Python中是一种独特的操作方式,并且具有较高的效率。适用于所有长度的字符串数据中都可以应用这种方法来获取其最后一个字符。值得注意的是,在这种情况下我们通常会采用从-1开始计数的方法(因为与之等价的操作可能会导致重复出现)。
s = "CHINA"
# 结果是C,取第一位
s[0]
# 结果是HI,取第一位和第二位,第三位不包含,开区间
s[1:3]
# 结果是CHINA,0可以不写
s[:5]
# 结果是CHINA,若全部不写就是取全部
s[ : ]
# 结果是INA,从第三位取到尾
s[2:]
# 结果是 CIA,从头到尾隔两个字符取一个
s[ : :2]
# 结果是AIC,从尾开始取,隔两个字符取一个
a[: : -2]
# 最后一个字符"A"
s[-1]
# 空字符串
s[0:0]
# 倒序输出一个字符串, 结果:ANIHC
s[::-1]
字符串函数
strip()函数
可以去除字符串中头和尾的空格字符
# 去除字符串中头和尾的空格字符
print(" msfnjsfn sd sda ").strip())
# 想要去除左边的空格
print(" sdsf ".lstrip())
# 想要去除右边的空格
print(" sdsf ".rstrip())
大小写操作的函数
# upper()函数,可以把字符串变成大写
print ('china'.upper())
# lower()函数,可以把字符串变成小写
print('CHINA'.upper())
# capitalize()函数,可以把字符串的首字母变成大写
print ('china'.capitalize())
#title()函数,可以把每个单词的首字母变成大写
print ('china i love you'.title())
字符串判断
字符串判断的函数,返回值是布尔值False True
# islower()函数,可以判断字符串是否是小写
print("china".islower())
# isupper()函数,可以判断字符串是否是大写
print("CHINA".isupper())
# isdigit()函数,可以判断字符串是否是全是数字,应用场景填写的手机号&金额等
print("123456".isdigit())
# startswith()函数, 可以判断字符串是否以XX开头,应用场景特殊格式是否符合需求
print("china".startswith('c'))
# endswith()函数,可以判断是否以指定的字符串结尾
print("china".startswith('a'))
查找和替代
# find()函数,可以找出子字符串,index()函数也有一样的效果,但是没找到的话会报错,一般不用
password = "123"
input_password = " 56612389"
print (input_password.find(password))
# count函数,可以找出字符串中某字母一共出现几次
b = "banana"
print(b.count("a"))
# replace()函数,可以替换字符串中的某一字母或者某一单词
print("aaaddd".replace("a","d")) # --->输出dddddd
# len()函数,可以显示字符串的长度
print(len("china"))
元组
字符串也是一种序列类型,在Python中可以通过迭代器对象对其进行遍历操作,并支持通过索引来获取特定位置的元素以及使用切片操作以获取子序列。然而这种序列仅由单一字符构成,在此基础上我们将会介绍一种更为复杂的序列结构——元组(英文称作tuple),它具备不可变性特点并专为数据存取操作设计,在Python中同样支持切片操作以获取子序列以及通过索引定位特定元素的操作功能。
元组定义
# 定义一个元素时,上元组定义的时候也可以不用括号,英文的逗号是必须加的,多个元素可加可不加
# 输出('solo',)
t = 'solo',
# 将一个序列强制转换为元组
tuple('abc') # ('a', 'b', 'c')
tuple(range(5)) # (0, 1, 2, 3, 4)
# 输出('p', 'y', 't', 'h', 'o', 'n')
t = tuple('python')
# 输出('p', 'y', 't', 'h', 'o', 'n')
t = ('p', 'y', 't', 'h', 'o', 'n')
# 输出('p', 'y', 't', 'h', 'o', 'n')
t = 'p', 'y', 't', 'h', 'o', 'n'
# 定义元组后通过下标索引访问
t = ('My', 'age', 'is', 18)
t[0] # 'my'
t[-1] # 18
# 也可以通过切片来访问,注意切片返回的是一个包含切片片段的新元组。
t[0:2] # ('My', 'age')
# 后面的逗号表明这是一个元组,否则就会被认为是一个字符串。
元组操作
通过使用join这一附加功能(虽然重复),可以让元组这些元素组合成一个完整的字符串
元组与字符串均为不可更改的形式即无法更改。我们无法单独修改元组中任何一个元素或者字符串中任何一个字符。
# "".join():字符串中的连接函数“”里面加空格和不加空格打印出来的格式有区别
# 输出结果:'My age is 18'
t = ('My', 'age', 'is', "18")
print(" ".join(t))
# 元组也支持 in 操作,想要判断元组中是否包含某个元素:
'a' in t # True
'x' in t # False
t1 = tuple("python")
# y在t里面一共出现多少次 ----->输出1
print(t1.count('y'))
# n在t里面是什么位置----->输出5
print(t1.index('n'))
# 查看T的长度----->输出6
print(len(t1))
遍历元组
元组属于序列,所以可以像字符串那样去遍历它:
lst = ('a', 'b', 'c', 'd', 'e')
for i in lst:
print(i)
元组嵌套格式
一个大的元组里面嵌套小的元组
sales = (
("peter",(70,80,90)),
("beter",(70,80,90)),
("heter",(70,100,90)),
("keter",(70,80,90)),
)
定义列表
定义列表被称为可变的元组,在其使用方法上与元组相似;主要区别在于它们能够灵活地增删元素。
# 定义了一个空的列表
lst = []
lst = list()
# 定义一个带有4个初始值的列表
lst = [1,2,3,4]
# 列表内定义了字符串、整型、浮点型,元组
lst = ["a",1,2,3,3.14,(1,2,3)]
# 通过传递可迭代序列:字符串、range()函数、元组转化成列表
lst = list( "asd")
lst = list (range(100))
lst = list ((1,2,3))
# 列表的访问,可通过索引(根据元素的类型返回)、切片(返回的同类的值)访问
lst = ['a','b','c','d','e']
# 通过索引访问第一个和最后一个
print(lst[0],lst[-1])
# 通过切片访问第一个到第三个(不包含),输出结果是['b','c']
print(lst[1:3])
# 追加函数append()
# 在列表后面最后面添加'f'
lst.append('f')
# 查看列表中的长度
print(len(lst))
# 修改列表中的函数,可用list索引
lst[0] = 'A'
# del删除函数
del lst[0] # 删除列表中第一个元素
列表函数
列表也是一种序列性数据结构;它同样支持通过index和count方法来访问元素;这些功能的使用方法与tuple类似;它的遍历方式与tuple相同。
下面来介绍一下列表特有的一些函数。
insert函数与刚刚介绍的append函数相同。它用于向列表中添加一个新元素的主要区别在于append仅在列表末尾添加元素而insert则可以在任意位置插入
在列表中指定某个位置之前添加一个新的项目,在Python中使用insert函数,在括号内依次提供所需的位置和要插入的元素
lst = ['a', 'c', 'e']
# 在第二个元素'c'前面插入一个字符串'b'
lst.insert(1, 'b') # lst现在的值是['a', 'b', 'c', 'e']
# 在最后一个元素'e'前面插入一个字符串'd'
lst.insert(-1, 'd') # lst现在的值是['a', 'b', 'c', 'd', 'e']
pop函数:
该方法用于从列表中移除最后一个元素;其区别在于,在移除的同时会返回被移除的元素;常用于那些在取得元素后立即使用场景中。
lst.pop()
last = lst.pop()
print(lst,last) # 输出结果:[lst内的元素] 被删除的元素
remove函数
通过del操作可以删除对应下标位置的元素。若要移除特定内容中的元素,则必须调用remove函数。使用remove函数时会依次检查列表中的每一个元素,在遇到与指定值匹配的第一个元素时将其移除。
lst = [1, 2, 1, 'a', 'b', 'c']
lst.remove('a')
print(lst) # lst的值为[1, 2, 1, 'b', 'c']
lst.remove(1) # 注意这里的1是元素值,不是索引
print(lst) # lst的值为[2, 1, 'b', 'c']
clear函数
会清空列表内的所有元素。
lst = [1,2,3,4]
lst.clear()
print(lst) # 结果为[]
extend函数
类似于append函数;然而,在每次操作中仅能新增一个数据项的情况下;extend则具备一次性追加一组数据的独特优势;它不仅能够扩展列表容量;而且相较于append方式更加高效;一次操作即可增加多个数据项
lst = []
lst.extend(range(5))
print(lst) # [0, 1, 2, 3, 4]
lst.extend([5, 6, 7])
print(lst) # [0, 1, 2, 3, 4, 5, 6, 7]
reverse函数:反转函数
lst.reverse() #把lst内的元素反转顺序打印
sort函数
按照固定规律对列表中的元素进行重组,在数值处理时,默认采用升序方式。
# lst里面是数字:
lst.sort() #按照从小到大排序
lst.sort(reverse=True) #从大到小排序
lst里面是revenue = [('1月',56100000),('2月',46100000),('3月',76100000)]
# 希望按照收入大小来排序,可以引进key参数 = 接收的是一个函数
revenue.sort(reverse= True, key = lamba x: x[1]) #指定让每个元组的第二个索引作为排序依据
对于字符串,则会按照每个字符对应的ASCII值进行排序。ASCII编码是一种基于拉丁字母的计算机编码标准。绝大多数编程语言均支持使用ASCII编码。共有128个不同的字符,其中包括数字'0'至'9'、小写字母'a'到'z'以及大写字母'A'到'Z'。此外还有一些常用符号如逗号、句号等。在Python中可以使用内置函数来实现字符与其对应的ASCII值之间的转换。ord()函数能够将单个字符转换为其对应的ASCII数值。例如:ord('A')返回65;ord('B')返回66;依此类推。
copy函数
我们想要生成一个完全一致的新列表,并且不再受其后续操作影响;为此我们可以使用copy函数:
copy函数
lst1 = [1,2,3] #lst1里面有数组123
lst2 = lst1 # 把lst1数组的123赋值给lst2
lst1.append(4) # lst1追加多一个4,lst1=[1,2,3,4]
print(lst1,lst2) #lst1和lst都是[1,2,3,4]
lst3 = lst1.copy() #复制 lst1的值是[1,2,3,4]赋值给lst3
lst1.append(5) # lst追加5,lst3=[1,2,3,4,5]
print(lst1,lst3) #结果:lst1=[1,2,3,4,5],lst3=[1,2,3,4,]
列表表达式
列表表达式是一种便捷的方式来创建列表的一种高效方法,在编程中常用于简化复杂的多行代码结构使其更加简洁易读。例如,在编程中我们可以使用这样的列表生成方式来实现列举所有小于二十的偶数
lst = [i for i in range(20)] #将遍历20内所有的数作为一个元素组成一个列表
lst = [i for i in range(20) if i % 2 == 0] #在后面加条件,遍历20内所有的偶数
# 另一种写法:
lst = [i *2 for i in range(10) ] # 在前面加条件
# 另一种写法:
lst = [i for i in range(0,20,2)] #利用步长取值,从0开始到20之内,每隔2位取一个值
print(lst)
字典 dict
字典的定义
通过花括号的方式可以直接创建字典。每一行中冒号左侧为键(key),右侧为值(value),称为键值对,并用逗号分隔。在本例中我们特意将每个键值对单独一行书写,并非必须如此;只需将它们用逗号分隔开来即可。需要注意的是,在字典中键必须唯一。对于像top_sales这样由一对一对元素组成的列表来说
sales = dict(top_sales)
# sales现在的值变成了
{
'Peter': 213,
'John': 253,
'Tony': 284,
'Henry': 205,
'Mike': 280
}
# 语法1:
sales = {
'mike':123,
'emm':321,
}
# 语法2:
top_sales = [("mike",123),("emm",321)] # 定义一个变量并赋值列表内的内容给这个变量
print( dict(top_sales))
增删查改
# 新增数据:第一步需要设置一个字典里面的值
sales['like'] = 0 # 指定新增一个like=0的数据
print(sales['like']) # 打印该新增数据的值
# 修改数据:
sales['like'] = 300 # 指定修改like的值修改成300
# 删除数据
del sales['like'] # 删除like的值
遍历词典
字典的遍历方式与列表、元组及字符串不同之处在于其元素结构特点:每个元素都由键值组成,在遍历过程中需特别注意这一特性。
通过items()函数获取字典中的键值对序列,并将其传递给for循环进行逐一处理。
在for循环中逐个提取键值对,并分别解析出键及其对应的值。
for key_value in sales.items():
print(key_value)
函数调用尝试访问字典中不存在的键会导致抛出异常,并在取值发生错误时继续执行该操作并输出相关信息提示。
sales.get('不存在的值') # ---->返回none
keys()函数返回所有key的序列
values()函数返回所有的值
# 只想单独列出所有的销售人员名单,可以这样写:
sales.keys()
# 可以对它进行遍历
for sale in sales.keys():
print(sale)
# 想计算出所有销售人员的销售额总和,也就是公司总销售额,可以直接取出value部分并求和:
sum(sales.values())
集合set
集合在Python中表现为一个无序且不允许重复元素的存在形式,在实际应用中通常用于去除数据中的冗余信息,并支持进行交集、并集等基本集合运算。
# 这两种方式都可定义集合
nums = {1, 2, 3, 4, 5}
nums = set([1, 2, 3, 4, 5])
lst = [1,2,3,4,5,5,1] # 定义一个list的数组
nums = set(lst) #把lst的传递给一个集合
print(nums) #打印结果是{1,2,3,4,5}
t= ('a','b','c','a') #定义一个元组
print(set(t)) #用set转化t成一个集合
print(list(nums)) #把nums集合转化成list
print(tuple(nums)) #把nums集合转化成元组
# 集合的遍历
for n in nums:
print(n)
# 查看集合nums的长度
print(len(nums))
# 用in函数来判断5是否存在集合nums中
print(5 in nums)
# 用add函数在集合nums中增加一个5,会先判断是否存在,如果存在不会再追加
nums.add(5)
# remove函数来删除集合nums中的5,如果删除的是nums中不存在的数5会报错
nums.remove(5)
# 用discard函数来删除集合nums中的5,就算5不存在nums中也不会报错
nums.discard(5)
# pop函数,删除集合中的某一个值并返回该值,可以一直执行直到集合内为空
num = nums.pop()
while len(nums) > 0: #如果集合nums内的长度大于0
# 一直使用pop函数迭代执行集合nums
num = nums.pop()
# 打印出集合的值
print(num)
集合的函数
s1 = {1,2,3,4}
s2 = {3,4,5}
print(s1.intersection(s2)) #求交集,返回{3,4}
s3 = s1.union(s2)) #求并集,返回(1,2,3,4,5)
print(s1.issubset(s3)) #判断是否是子集,返回布尔值True
print(s3.issupperset(s2)) # 判断是否是父集,返回布尔值True
函数
函数的调用与参数
我们使用def关键字来定义函数
#定义一个函数是hello2,里面有两个参数(里面还可以继续加参数,用,隔开即可)
def hello2(name,sex):
if sex == 'boy': #如果参数sex是boy
print("Hi,Mr.", name) #打印出Hi,Mr.参数name
elif sex == 'girl': #如果参数sex是girl
print("Hi, Mrs.",name) #打印出Hi,Mrs.参数name
hello2('john', 'boy') #调用hello2,name的值是John,sex的值是boy
hello2('Amy', 'girl') #调用hello2,name的值是Amy,sex的值是girl
hello2(sex='boy',name='Mike') #调用hello2,把boy赋值给sex,把Mike赋值给name
函数的返回值
如果将函数类比作一名工作人,则调用函数作为工作平台为这些功能提供明确的操作流程。同样地,在这种架构中存在一些基本的功能模块需要进行深入配置和管理以确保系统的稳定运行。这些功能的行为模式及其运行结果也是预先定义好的。
ef multiply(num1, num2) # 定义一个函数是multiply,里面有两个参数
return num1 * num2 # 返回num1乘以num2的乘积
print(multiply(2, 4)) # 调用multiply函数,num1的值是2,num2的值是4,打印出multiply的返回值是8
def permit(age): # 定义一个函数是permit,里面有一个参数是age
if age >= 18: # 如果age大于等于18
print("准许进入") # 打印准许进入
return True # 返回True,以下代码不执行
else : # 如果age小于18
print("禁止进入") # 打印禁止进入
return False # 返回False,以下代码不执行
permit(18) # 调用函数permit,age是18
permit(17) # 调用函数permit,age是17
permit(29) # 调用函数permit,age是29
我们创建了一个仅允许成年及以上者进入的函数若输入年龄大于等于18岁则会输出True表示通过;而当输入年龄低于18岁时该函数将拒绝通过。值得注意的是该函数最多只能有一个返回结果因此它要么输出True要么输出False随后程序将停止运行不会继续执行后续代码这部分逻辑设计有助于确保程序流程的一致性和可预测性以避免潜在的错误或混淆情况发生。
匿名函数
当我们偶尔需要一个简单的函数时(且其逻辑相对简单),此时我们可以定义一个匿名函数。
lambda n: n * n
在Python中,lambda是一个 reserved keyword,在程序设计中常用于创建无名函数。其功能模块通常仅限于执行单行指令,并且无需明确指定名称和返回结果。这些特点使得lambda成为一种高效简洁的编程工具。
revenue = [('1月',5610000),('2月',4850000),('3月',622000)()]
key = lambda x: x[1] # 定义一个匿名函数key=lambda x,取x得小标是2的值
for r in revenue:
print(key(r)) #打印key里面的每一项
面向对象
面向过程:根据业务逻辑从上到下写代码。
面向对象编程中:将变量和函数以及属性绑定了在一起,并按照类别进行了封装。每个程序都只负责分配自己的功能,在这种情况下能够更加高效地开发出相应的系统,并且从而减少了不必要的重复代码。
那么,对象是什么?我们理解为现实存在的物化形态,在现实中表现为具体的事物或现象。例如一个用户一台ATM机或一栋建筑等。无论是实体形态还是虚拟形态它们都具有某些共同特征:都是名词都有特定的行为特征并具备独特的属性。
类和实例
基于创建对象而存在的类首字母大写
class Dog: #创建一个类是Dog
pass
dog = Dog()
dog1, dog2 = Dog(), Dog() #根据这个类可以创建N个dog对象
print(dog)
通过内置函数type可以获得任意对象所属的数据类型;如果无法确定某个对象是否属于特定数据类型时,则可以通过调用type函数来进行判断。
type(1)
type('abc')
type([])
isinstance判断是否是实例,判断类和对象的关系
print(isinstance(dog, Dog)) #第一个参数是对象dog,第二个参数是需要判断的类
对象的属性与方法
每个类的方法都接受一个名为 self 的第一个参数,在实际调用时无需传递此参数;这是类方法与普通函数的主要区别;这里的 self 代表实例自身;现在我们来创建 Dog 的实例
class Dog:
def __init__(self):
self.breed = None
self.color = None
self.size = None
def eat(self):
print("I like bones")
def run(self):
print("I'll catch you.")
def bark(self):
print('Wang! Wang!')
dog = Dog()
dog.eat()
dog.run()
dog.bark()
print('一只%s型%s色的%s' % (dog.size, dog.color, dog.breed))
# 调用不同的方法能打印出不同的内容,体现了不同的行为。但是最后一句话打印出来的内容却是None,因为我们还没有设置相应的属性。
一切皆对象
在我们的使用中, 数值、text 以及 functions 甚至 类本身 都是 object。所有 object 都可用 type 函数 判断其 type, 同时也可以利用 dir 函数 查看其 attributes 和 methods.
"""
会显示出dog对象的所有属性和方法,包括刚刚定义的那几个方法和属性。对于对象,也可以使用help
函数查看它的帮助文档。
"""
dir(dog)
help(sum)
help(print)
模块和包管理
Python提供了丰富无异的标准库与第三方库。掌握模块与包的基本概念对我们的编程能力至关重要。这一概念不仅影响着我们能否有效地利用这些宝贵资源,并且关系到如何有条理地组织我们的代码结构。
# 导入一个math内置模块
import math
# 可以使用math模块里的所有函数了,可以使用dir来看一下都有哪些函数
dir(math)
# 也可以使用from ... import ... 这种语句来具体导入某一个子模块或函数
from math import sqrt
# 这种方式更精确的导入某个函数,使用起来更方便, 但要注意重名的问题。如果说我们的代码本来就有
一个叫sqrt的函数,那我们可以使用 as 关键字来给模块起一个别名
from math import sqrt as squarte
# 要一次性导入多个模块
import sys, os
from math import sqrt, pow
常用内置模块
datetime - 日期时间类型
在datetime模块中主要包含了一些常用的日期时间类别,在这些类别中应用最多的是datetime和timedelta这两个类型
from datetime import datetime, timedelta
# 返回当前时间的detetime对象
now = datetime.now()
type(now)
# 查看当前时间的年月日
print(now.year, now month, now.day)
# 查看当前时间戳,精确到时分秒
now.timestamp()
# 返回指定格式的日期字符串
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 将指定格式的字符串转化成日期时间对象
datetime.strptime('2022-11-29 10:17:30', '%Y-%m-%d %H:%M:%S')
日期时间常用的代码含义 | 代码| 含义| 栗子 |
| --- | --- | --- |
|---|---|---|
| %m | 补零后,以十进制数显示的月份 | 01,02.....12 |
| %d | 补零后,以十进制数显示的月份中的一天 | 01,02...31 |
| %H | 补零后的十进制数表示的小时(24小时制) | 00,01...23 |
| %M | 补零后以十进制数显示的分钟 | 00,01...59 |
| %S | 补零后以十进制数显示的秒 | 00,01...59 |
time时间的访问和转换
在编程中,一个常用的模块是time模块,在开发过程中主要用于调试脚本。例如,在自动化测试中需要定位某个元素时,通常会短暂暂停程序运行。
import time
# 返回当前时间戳
time.time()
# 返回房前时间的格式化字符串
time.strftime('%Y-%m-%d %H:%M:%S')
# 用于脚本调试休眠的time.sleep,休眠3秒
time.sleep(3)
random-生成随机数
random模块会基于当前的系统时间设置为随机数种子,并从而能够确保生成的所有随机数值都是唯一的。
# 生成一个随机浮点数,范围[0.0, 1.0)
random.random()
# 生成1到100之间的随机整数,包括1和100
random.randint(1, 100)
# 从序列中随机抽出一个元素
random.choice(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
# 从序列中随机抽出k个元素,注意抽出来的元素可能会重复
random.choices(['a', 'b', 'c', 'd', 'e', 'f', 'g'], k=2)
# 跟choices函数类似,但它是不重复的随机抽样
random.sample(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
# 将一个序列随机打乱,注意这个序列不能是只读的
lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
random.shuffle(lst)
os - 操作系统接口
os模块主要用于使用与操作系统相关的功能的便捷式途径。
# 获取当前的工作目录
print(os.getcwd())
# 创建目录
os.mkdir(os.getcwd() + '/test') # 只能创建一层目录
os.makedirs(os.getcwd() + '/test2'/123) # 创建多层目录
os.listdir(os.getcwd()) # 列出当前工作目录下的内容
os.listdir('/') #列出根目录下的内容
os.path.abspath('./') #获取当前目录的绝对路径
os.path.abspath('..') #获取父级目录的绝对路径(当前目录的上一级目录)
# 相对路径:./text.txt ../test/abc.py
# 绝对路径: c:\user\
# 目录分隔符: Windows:\ Linux和Mac:/
print(os.path.abspath(__file__)) # 获取当前文件的绝对路径
# 判断文件是否存在
os.path.isfile(os.path.abspath(__file__)) # 判断某路径是不是常规的文件,返回True或者False
# 输出当前系统下的目录分割符
print(os.sep)
# 拼接多个路径目录
os.path.join(os.getcwd(), 'def','123') # 拼接当前目录\def\123
# 返回当前文件所在的绝对路径
os.path.dirname(os.path.abspath(__file__))
# 返回当前文件的文件名(或者目录)
os.path.basename(os.path.abspath(__file__))
sys - 系统相关参数及函数
sys.path 是一个列表。
它包含了许多路径。
这些路径代表了Python搜索包的顺序。
其中第一个为空字符串。
这个空字符串代表当前目录。
原因在于通过import 语句我们可以导入模块。
sys.argv 表示启动的时候传递给Python脚本的命令行参数。
import sys
if __name__ == '__main__':
print("Hello", end=' ')
if len(sys.argv) > 1:
print(' '.join(sys.argv[1:]))
# sys.argv是个列表
type(sys.argv)
print(sys.argv)
