变量
变量概述
变量是一种存储数据的载体,计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间,变量的值可以被读取和修改
变量类型
常见变量类型
- 数字(number)
- 整型 (int)
- 长整型(long,python3中已移除)
- 浮点型(float)
- 复数型(complex):3+5j
- 字符串:字符串是以单引号或双引号括起来的任意文本,比如
'hello'
和"hello"
,字符串还有原始字符串表示法、字节字符串表示法、Unicode字符串表示法,而且可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾) - 布尔型:True、False
- 列表(list)
- 元组(tuple)
- 字典(dictory)
-
变量命名规则
硬性规则:
- 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。
- 大小写敏感(大写的
a
和小写的A
是两个不同的变量)。 - 不要跟关键字(有特殊含义的单词,后面会讲到)和系统保留字(如函数、模块等的名字)冲突。
- PEP 8要求:
- 用小写字母拼写,多个单词用下划线连接。
- 受保护的实例属性用单个下划线开头(后面会讲到)。
- 私有的实例属性用两个下划线开头(后面会讲到)。
变量使用及运算
"""
使用变量保存数据并进行加减乘除运算
a = 321
b = 12
"""
print(a + b) # 333
print(a - b) # 309
print(a * b) # 3852
print(a / b) # 26.75
运算符
| 运算符 | 描述 | | —- | —- | |[]
[:][start_index:end_index:step]
| 下标,切片
start_index默认第一位
index_index默认最后一位
step默认为1,若为负数,则表示逆序取值 | |**
| 指数 | |~
+
-
| 按位取反, 正负号 | |*
/
%
//
| 乘,除,模,整除 | |+
-
| 加,减 | |>>
<<
| 右移,左移 | |&
| 按位与 | |^
|
| 按位异或,按位或 | |<=
<
>
>=
| 小于等于,小于,大于,大于等于 | |==
!=
| 等于,不等于 | |is
is not
| 身份运算符 | |in
not in
| 成员运算符 | |not
or
and
| 逻辑运算符 | |=
+=
-=
*=
/=
%=
//=
**=
&=
| =<br />
<br />^=<br />
<br />>>=<br />
<br /><<=
|
表达式
字符串和常用数据结构
字符串
转义字符 \ 的使用
\n
不是代表反斜杠和字符n,而是表示换行;而\t
也不是代表反斜杠和字符t,而是表示制表符。同理字符”\” 需要表示为\\
后面还可以跟一个八进制或者十六进制数来表示字符 | 字符 | 意义 | ASCII(十进制) | | —- | —- | —- | | \(在行尾时) | 续行符 |
| | \\ | 反斜杠符号 | ord(“\\“) -> 92 | | \‘ | 单引号 | | | \“ | 双引号 | | | \a | 响铃 | 007 | | \b | 退格(Backspace) | 008 | | \e | 转义 | | | \000 | 空 | | | \n | 换行 | 010 | | \v | 纵向制表符 | | | \t | 横向制表符 | | | \r | 回车 | | | \f | 换页 | 012 | | \oyy | 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。 | | | \xyy | 十六进制数,以 \x 开头,yy代表的字符,例如:\x0a代表换行 | | | \other | 其它的字符以普通格式输出 | |
不希望转义:
- r’\n’
print(r'\n') #"\\n"
- r’\n’
字符串方法
str1 = 'hello, world!'
# 通过内置函数len计算字符串的长度
print(len(str1)) # 13
# 获得字符串首字母大写的拷贝
print(str1.capitalize()) # Hello, world!
# 获得字符串每个单词首字母大写的拷贝
print(str1.title()) # Hello, World!
# 获得字符串变大写后的拷贝
print(str1.upper()) # HELLO, WORLD!
# 从字符串中查找子串所在位置
print(str1.find('or')) # 8
print(str1.find('shit')) # -1
# 与find类似但找不到子串时会引发异常
# print(str1.index('or'))
# print(str1.index('shit'))
# 检查字符串是否以指定的字符串开头
print(str1.startswith('He')) # False
print(str1.startswith('hel')) # True
# 检查字符串是否以指定的字符串结尾
print(str1.endswith('!')) # True
# 将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.center(50, '*'))
# 将字符串以指定的宽度靠右放置左侧填充指定的字符
print(str1.rjust(50, ' '))
str2 = 'abc123456'
# 检查字符串是否由数字构成
print(str2.isdigit()) # False
# 检查字符串是否以字母构成
print(str2.isalpha()) # False
# 检查字符串是否以数字和字母构成
print(str2.isalnum()) # True
str3 = ' jackfrued@126.com '
print(str3)
# 获得字符串修剪左右两侧空格之后的拷贝
print(str3.strip())
列表
不知道大家是否注意到,刚才我们讲到的字符串类型(
str
)和之前我们讲到的数值类型(int
和float
)有一些区别。数值类型是标量类型,也就是说这种类型的对象没有可以访问的内部结构;而字符串类型是一种结构化的、非标量类型,所以才会有一系列的属性和方法。接下来我们要介绍的列表(list
),也是一种结构化的、非标量类型,它是值的有序序列,每个值都可以通过索引进行标识,定义列表可以将列表的元素放在[]
中,多个元素用,
进行分隔,可以使用for
循环对列表元素进行遍历,也可以使用[]
或[:]
运算符取出列表中的一个或多个元素。列表定义
- list1= []
- list1= [1,2,3] # 多个值用“,”分隔
- 列表取值
- list1[0] #1
- list1[-1] #3
- 列表长度计算
- len(list1) #3
- 列表循环
# 通过循环用下标遍历列表元素
for index in range(len(list1)):
print(list1[index])
# 通过for循环遍历列表元素
for elem in list1:
print(elem)
# 通过enumerate函数处理列表之后再遍历可以同时获得元素索引和值
for index, elem in enumerate(list1):
print(index, elem)
- 列表循环
- 列表增删改
- 添加元素
- list1.append(4) #在末尾添加
- list1.assert(n,x) #在第n位插入x
- 合并列表
- list3+=[1,2]
- 删除指定位置元素
- list1.pop(0) #删除第一个元素
- 清空列表 #python3特性
- list1.clear()
生成式
f = [x for x in range(1, 10)]
print(f)
f = [x + y for x in 'ABCDE' for y in '1234567']
print(f)
# 用列表的生成表达式语法创建列表容器
# 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
f = [x ** 2 for x in range(1, 1000)]
print(sys.getsizeof(f)) # 查看对象占用内存的字节数
print(f)
生成器
# 请注意下面的代码创建的不是一个列表而是一个生成器对象
# 通过生成器可以获取到数据但它不占用额外的空间存储数据
# 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f)) # 相比生成式生成器不占用存储数据的空间
print(f)
for val in f:
print(val)
yield关键字
```python def fib(n): a, b = 0, 1 for _ in range(n): a, b = b, a + b yield a
- list1.clear()
- 添加元素
def main(): for val in fib(20): print(val)
元组
Python中的元组与列表类似也是一种容器数据类型,可以用一个变量(对象)来存储多个数据,不同之处在于元组的元素不能修改