python中变量名命名规则


  • 普通变量:max_value
  • 全局变量:MAX_VALUE
  • 内部变量:_local_var
  • 和关键字重名:class_
  • 函数名:bar_function
  • 类名:FooClass
  • 布尔类型的变量名用 is,has 这类词语前缀
    is_superuser
    has_errors
    allow_empty
  • 释义为数字的单词
    port
    age
    radius
  • 以_id 为结尾的单词
    user_id
    port_id
  • 以 length/count 开头或结尾的词
    length_of_username
    max_length
    users_count
    注:不要用名词的复数形式来作为 int 类型的变量名,因为名词的负数形式更像是一个容器。建议使用 number_of_apples 或 trips_count;
  • 超短命名
    数组索引三剑客 i、j、k
    某个整数 n
    某个字符串 s
    某个异常 e
    文件对象 fp

变量注解


在Python3.5之后,可以使用类型注解功能来注明变量类型,在变量后添加类型,并用冒号隔开。

def repeat_message(message: str, count: int) -> str:
    return message * count

算术运算符


  • // 取整除
  • % 取余
  • ** 幂

不同类型变量之间的计算


  • 数字型变量之间可以直接计算;
  • 如果变量是 bool 型,在计算时,true 对应的是1,false 对应的是0;
  • 字符串变量之间使用 + 拼接字符串。

获取输入的信息-input


  • 字符串变量 = input("提示信息")

input 输入的数据类型都是字符串类型

格式化输出


  • %s --字符串
  • %d --有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全
  • %f --浮点数,%.2f 表示小数点后只显示两位,会四舍五入
  • %% --输出%
vb1 ='Tom'print("hello %s"% vb1)
vb2 =5
print('有符号十进制整数:%d'% vb2)
print('输出显示位数的整数:%06d'% vb2)
vb3 =3.1415926
print('保留两位小数:%.2f'% vb3)
print('保留三位小数:%.3f'% vb3)
vb4 =80
print('正确率为:%d%%'% vb4)

hello Tom
有符号十进制整数:5
输出显示位数的整数:000005
保留两位小数:3.14
保留三位小数:3.142
正确率为:80%

逻辑运算


  • and:
    条件1 and 条件2
  • or:
    条件1 or 条件2
  • not:(取反)
    not 条件
a =10
b =20
c =10
if c == a and c == b:
    print('right')
else:
    print('error')

error
a =10
b =20
c =10
if c == a or c == b:
    print('right')
else:
    print('error')

right

循环-while


初始条件设置 -- 通常是重复执行的 计数器

while 条件 1:

条件满足时,做的事情 1

条件满足时,做的事情 2

条件满足时,做的事情 3

……

while 条件 2:

条件满足时,做的事情 1

条件满足时,做的事情 2

条件满足时,做的事情 3

……

处理条件 2

处理条件 1

print 函数增强


在默认情况下,print 函数输出内容之后,会自动在内容末尾增加换行;

如果不希望末尾增加换行,可以在 peint 函数输出内容的后面增加,end=""

其中""中间可以指定 print 函数输出内容之后,继续希望现实的内容;

语法格式如下:

print("*",end="")

转义字符


  • \t--在控制台输出一个制表符,协助在输出文本时,垂直方向,保持对齐
  • \n--在控制台输出一个换行符
  • \r--回车
  • \--反斜杠符号
  • \'--单引号
  • \"--双引号

列表


  • 列表通过索引取值,列表索引从0开始,且不能超过范围;
  • len(列表)--获取列表的长度
  • 列表.count(数据)--数据在列表中出现的次数
  • 列表.index(数据)--获取数据第一次出现的索引
  • del 列表 [索引]--删除指定索引的数据
  • 列表.remove[数据]--删除第一个出现的指定数据
  • 列表.pop--删除末尾数据
  • 列表.pop(索引)--删除指定索引的数据
  • 列表.insert(索引,数据)--在指定位置插入数据
  • 列表.append(数据)--在末尾追加数据
  • 列表.extend(列表 2)--将列表2的数据追加到列表1
  • 列表.sort()--升序排序
  • 列表.sort(reverse=True)--降序排序
  • 列表.reverse() 反转/逆序

元祖


  • Tuple(元组)与列表类似,不同之处在于元组的 元素不能修改;
  • 创建空元组:info_tuple = ()
  • 元组中只包含一个元素时,需要在元素后面添加逗号:info_tuple = (50, )
  • len(元组)--获取元组的长度 n+1;
  • 元组.count(数据)--数据在元组中出现的次数;
  • 元组 [索引]--从元祖中取值;
  • 元组.index(数据)--获取数据第一次出现的索引。

元组和列表之间的转换


  • 使用 list 函数可以把元组转换成列表
    list(元组)
  • 使用 tuple 函数可以把列表转换成元组
    tuple(列表)

字典


  • Python 里的字典在底层使用了哈希表 (hash table) 数据结构
  • 和列表的区别:列表 是 有序 的对象集合 字典 是 无序 的对象集合

Python3.6 之后的字典是有序的,如果解释器版本没有那么新,也可以使用 collections 模块里的 OrderedDict 方法保证字典的有序性。
OrderedDict 与新版字典在比较上面的区别:在对比两个内容相同但顺序不同的字典时,新版字典会返回 True,OrderedDict 则会返回 False。

from collections import OrderedDict
    d = OrderedDict()
    d['one'] = 1
    d['two'] = 2
    print(d)

    OrderedDict([('one', 1), ('two', 2)])
  • 键必须是唯一的;
  • 值可以取任何数据类型,但键只能使用字符串、数字或元组;
  • 字典.keys()--所有 key 列表;
  • 字典.values()--所有 value 列表;
  • 字典.items()--所有(key,value)元组列表;
  • 字典 [key]--可以从字典中取值,key 不存在会报错;
    1.返回的数据类型类似列表,但不是真正意义的列表,没有 append() 方法;
    2.但是可以用于 for 循环;
    3.可以用 list() 方转换成真正的列表;
  • 字典.get(key)--可以从字典中取值,key 不存在不会报错;
  • del 字典 [key]--删除指定键值对,key 不存在会报错;
  • 字典.pop(key)--删除指定键值对,并且返回删除键对应的值,key 不存在会报错;
  • 字典.pop(key, default=msg)--删除指定键值对,并且返回删除键对应的值,key 不存在不会报错,会返回 msg;
  • 字典 popitem() 方法返回并删除字典中的最后一对键和值。
  • 字典.clear()--清空字典;
  • 字典 [key] = value
    如果 key 存在,修改数据
    如果 key 不存在,新建键值对
  • 字典.setdefault(key,value)
    如果 key 存在,不会修改数据
    如果 key 不存在,新建键值对
  • 字典.update(字典2)--将字典2的数据合并到字典1,如果字典2中有和字典 1 重复的键值对,则替换字典 1 中的键值对;
  • 生成字典的方法:d = dict.fromkeys(["name","age","code"],0) #0 为默认值

字符串


  • 拼接多个字符串,使用 str.join 和 +=同样好用;
  • len(字符串)--获取字符串的长度;
  • 字符串.count(字符串)--小字符串在大字符串中出现的次数;
  • 字符串 [索引]--从字符串中取出单个字符;
  • 字符串.index(字符串)--获得小字符串第一次出现的索引;
  • string.istitle() | 如果 string 是标题化的 (每个单词的首字母大写) 则返回 True;
  • string.startswith(str) | 检查字符串是否是以 str 开头,是则返回 True;
  • string.endswith(str) | 检查字符串是否是以 str 结束,是则返回 True;
  • string.find(str, start=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1 ;
  • string.index(str, start=0, end=len(string)) | 跟 find() 方法类似,不过如果 str 不在 string 会报错;
  • string.replace(old_str, new_str, num=string.count(old)) | 把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次;
  • string.capitalize() | 把字符串的第一个字符大写;
  • string.title() | 把字符串的每个单词首字母大写;
  • string.lower() | 转换 string 中所有大写字符为小写;
  • string.upper() | 转换 string 中的小写字母为大写;
  • string.swapcase() | 翻转 string 中的大小写;

字符串 - 切片


  • 切片方法适用于字符串、列表、元组;
  • 字符串 [开始索引:结束索引:步长];
  • 切片:正反向索引(正:从 0 开始,反:从-1 开始)

切片索引:[start <-step]

  • start:开始截取的位置,包含在截取内容内
  • end:结束截取的位置,结束截取的位置并不包含
  • step:截取的步长,默认值为 1
  • step:为正,表示从左到右进行截取,start 必须在 end 之前(从左开始算前,下标必须从左到右)
  • step:为负,表示从右到左进行截取,start 必须在 end 之前(从右开始算前,下标必须从右到左)
  • s = "hello,world"
    print(s[:]) # 取全部
    print(s[1:]) # 从第 2 位取到最后
    print(s[:-1]) # 从开始取到倒数第二位
    print(s[::2]) # 步长为 2
    print(s[::-1]) # 反序

指定的区间属于左闭右开型 [开始索引, 结束索引) => 开始索引 >= 范围 < 结束索引
从 起始位开始,到 结束位的前一位 结束(不包含结束位本身)
从头开始,开始索引 数字可以省略,冒号不能省略
到末尾结束,结束索引 数字可以省略,冒号不能省略
步长默认为 1,如果连续切片,数字和冒号都可以省略
索引的顺序和倒序:
在 Python 中不仅支持 顺序索引,同时还支持 倒序索引
所谓倒序索引就是 从右向左 计算索引
最右边的索引值是 -1,依次递减

字符串格式化


  • 优先使用 f-string 方式
将username靠右对齐,左侧补空格一共到20位username = 'Lili'
print(f'{username:>20}')
               Lili
  • 对参数复用时可以使用 str.format 方式
username = 'Lily'
sore = 10
print('{0}:{0}的成绩是{1}'.format(username, sore))

集合


  • 集合是一个无序的可变容器类型,他最大的特点就是成员不能重复
  • 要初始化一个空集合只能调用 set() 方法,因为{}表示的是一个空字典,而不是一个空集合
  • 集合也有自己的推导式-nums = {n for n in range(10) if n % 2 == 0}
  • 集合是可变类型,可以通过.add() 追加元素
  • 可以使用 update 方法可以将一个可迭代元素更新到集合中
s1 = set([1,2,3])
s2 = set([2,3,4])
s1.update(s2)
s1.update('hello')
print(s1)
{1, 2, 3, 4, 'o', 'h', 'e', 'l'}
  • 使用.remove() 可以删除集合中的元素,但元素不存在会报错-KeyError:
  • 使用.discard() 可以删除集合中的元素,元素不存在也不会报错
  • 集合的元素不可以修改,只能先删再加
  • 我们可以使用 in 判断某个元素是否在某个集合中,不能在集合中取值,只能使用 for 循环遍历集合中的元素
  • 集合只能存放可哈希对象
s1 = set([1,2,3])
s1.add([1])
TypeError: unhashable type: 'list'

集合的运算


集合支持集合运算,比如交集、并集、差集。所有的操作都可以用两种方式:方法和运算符;

  • 交集
fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'tomato','orange','grapes','mango'}
print(fruits_1 & fruits_2)
{'orange'}
  • 并集
fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'tomato','orange','grapes','mango'}
print(fruits_1 | fruits_2)
{'tomato', 'pineapple', 'orange', 'apple', 'grapes', 'mango'}
  • 差集(前有后没有)
fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'tomato','orange','grapes','mango'}
print(fruits_1 - fruits_2)
{'apple', 'pineapple'}
  • symmetric_difference:返回两个集合中不重复的元素
fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'tomato','orange','grapes','mango'}
print(fruits_1.symmetric_difference(fruits_2))
{'apple', 'mango', 'tomato', 'pineapple', 'grapes'}
  • issubset:用于判断集合的所有元素是否都包含在指定集合中
fruits_1 = {'apple','orange','pineapple'}
fruits_2 = {'apple','orange','pineapple','water'}
print(fruits_1.issubset(fruits_2))
print(fruits_2.issubset(fruits_1))
True
False

Python 循环结构


  • 什么时候用 for:当循环次数是一定的,或者是循环对象是一定的,比如说在一个固定的字符串或列表中进行循环,那么最好使用 for
  • 什么时候用 while:当循环次数不是一定的,只是满足某个条件时才进行循环,那么最好使用 while
  • 没有 do…while…循环
  • 循环里面加 else:当循环执行完毕时,else 才会执行;如果循环在中间退出,则 else 不会运行
  • break&continue:不管是 break 还是 continue 都只作用于当前循环

匿名函数-lambda


  • lambda 关键字能够帮我们创建小型的匿名函数:
  • lambda x:express
  • lambda 返回的是该匿名函数的指针
  • func = lambda x,y:x*y
    print(func(2,3))