1. 变量和赋值
- 变量在 Python 内部是有类型的,但是在编程时无需关注变量类型,无需提前声明,赋值后就能使用。
- 可以将不同类型的数据赋值给同一个变量,所以变量的类型是可以改变的。
- 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。
- Python 变量名是大小写敏感的,face != Face。
t = "Hello world"
print(t) # Hello world
t = 1
print(t) # 1
2. print()函数
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按
str()
方式进行转换为字符串输出; -
sep
:实现分隔符,比如多个参数输出时想要输出中间的分隔字符; -
end
:输出结束时的字符,默认是换行符\n
; -
file
:定义流输出的文件,可以是标准的系统输出sys.stdout
,也可以重定义为别的文件; -
flush
:是否立即把内容输出到流文件,不作缓存。 - 一般使用print函数时后边的参数是不用管的,使用默认参数即可。
3. 注释
- 在 Python 中,
#
表示注释,作用于整行。 -
'''
或者"""
表示多行注释,在三引号之间的所有内容都将被注释
# 这是一个注释
print('Hello world') # Hello world
'''
这是多行注释,三个双引号同理
'''
print('Hello world') # Hello world
4. 数据类型与转换
基本数据类型
Python中的数据类型一般有如下几类:
- 基本类型:整型、浮点型、布尔型(本节介绍)
- 容器类型:字符串、元组、列表、字典和集合(后续章节详细说明)
类型 | 例子 |
---|---|
整型<class 'int'>
|
1, 2, 3, 4 |
浮点型<class 'float'>
|
1.222, 1.333, 1.444 |
布尔型<class 'bool'>
|
True, False |
Python 里面万物皆对象(object),基本类型也不例外,只要是对象,就有相应的属性 (attributes) 和方法(methods)。
通过print可以查看对象的类型:
# 可以使用type()函数查看对象的类型,若要判断变量的类型推荐使用isinstance()
a = 1
print(a, type(a)) # 1 <class 'int'>
print(a, isinstance(a, int)) # True
b = 0.0045
c = 4.5e-3 # 支持用科学计数法表示浮点数
print(b, type(b)) # 0.0045 <class 'float'>
print(b, c) # 0.0045 0.0045
# 布尔型变量只能取 True 或 False 两个值,在数字运算中, True 代表1, False 代表0
d, e = True, False
print(d, type(d)) # True <class 'bool'>
print(d, e) # True False
print(True + True + False) # 2
对于bool,除了直接给变量赋值,还可以用 bool(X)
来创建变量,X可以是上边提到的所有类型:
# 对于基本类型变量,除了整型0、浮点型0.0、布尔型False是False,其余全为True
print(bool(0), bool(1)) # False True
print(bool(0.00), bool(10.31)) # False True
print(bool(False), bool(True)) # False True
# 对于容器类型变量,X只要不空就是True,否则False
print(type(''), bool(''), bool('python')) # <class 'str'> False True
print(type(()), bool(()), bool((10,))) # <class 'tuple'> False True
print(type([]), bool([]), bool([1, 2])) # <class 'list'> False True
print(type({}), bool({}), bool({'a': 1, 'b': 2})) # <class 'dict'> False True
print(type(set()), bool(set()), bool({1, 2})) # <class 'set'> False True
使用dir函数可以查看对象拥有哪些方法,对它们有个大概印象就可以了,具体怎么用,需要哪些参数 (argument),到需要的时候可以查文档:
print(dir(bool))
''' 输出如下:
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
'''
Python 里面有很多用途广泛的包 (package),用什么我们就引进 (import) 什么。包也是对象,也可以用上面提到的dir(decimal)
来看其属性和方法。
例:保留浮点型的小数点后 n
位,可以用 decimal
包里的 Decimal
对象和 getcontext()
方法来实现:
import decimal # 从Python库中导入decimal包
from decimal import Decimal # 从decimal包中导入Decimal对象
decimal.getcontext().prec = 4 # decimal中默认精度为28,可以通过修改其属性prec来调整精度
print(Decimal(1) / Decimal(3)) # 0.3333
当然,这只是一个为了介绍包的概念使用的例子,在正常编程中保留n位小数可以使用round函数:
print(round(1/3, 4)) # 0.3333
类型转换
虽然Python是弱类型编程语言,不需要像 Java 或 C 那样需要在使用变量前声明其类型,但在一些特定场景中,仍然需要用到类型转换,下边运算部分里的按位运算中就用到了二进制转换 bin() ,可以把数字转换成二进制字符串。常见的Python类型转换格式如下:
- 转整型:
int(x, base = 10)
- 转浮点型:
float(x)
- 转字符串:
str(x)
print(int('520')) # 520
print(int(520.52)) # 520
print(float('520.52')) # 520.52
print(float(520)) # 520.0
print(str(10 + 5.2)) # 15.2
5. 运算
赋值与算术、比较运算符
在日常编程中我们最常用的应该就是赋值运算符 =
了,其使用很简单,常见的算术运算符和比较运算符如下,也不必多讲:
运算符 | 名称 | 示例 |
---|---|---|
+、-、*、/ | 加减乘除 | 1 + 1 = 2 |
// | 整除 | 5 // 4 = 1 |
% | 取余 | 5 % 4 = 1 |
** | 幂 | 2 ** 3 = 8 |
>、>=、<、<= | 大于、大于等于、小于、小于等于 | 2 > 1、1 <= 2 |
==、!= | 等于、不等于 | 3 == 4、3 != 4 |
在形如 a = a + 1
的语句结构中,Python也支持对赋值运算符的改造,即 a += 1
,上述表格中的算术运算符都可以这样。另外,在Python3.8中引入了海象运算符,可以在使用表达式的同时完成赋值操作,解说如下:
# 官网举例
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
# 对比下边不使用海象运算符的写法,可以看出运算符可以更优雅的省去专门赋值中间变量或是多次调用的过程
# 写法1(多次调用):
if (len(a)) > 10:
print(f"List is too long ({len(a)} elements, expected <= 10)")
# 写法2(专门赋值):
n = len(a)
if (n) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
逻辑运算符
Python的逻辑运算符与Java、c等语言使用 && || !
来表示不一样,使用 and、or、not 来表示与或非:
运算符 | 名称 | 示例 |
---|---|---|
and | 与 | True and False # False |
or | 或 | 3 > 1 or 2 > 3 # True |
not | 非 | not True # False |
对比Java中的条件三目运算符,Python也有对应版本,只是写法不同:
a = 1 if 3 > 4 else 0
print(a) # 0
成员、身份运算符
成员运算符 | 名称 | 身份运算符 | 名称 |
---|---|---|---|
in | ...在...里 | is | ...是... |
not in | ...不在...里 | is not | ...不是... |
成员运算符用于表示指定的元素是否在指定序列中:
a, b = 1, [ 1, 2, 3 ]
print(a in b) # True
print(a not in b) # False
身份运算符用来比较两个对象的存储单元是否一致:
a, b, c, d = "hello", "hello", ["hello"], ["hello"]
print(a is b, a == b) # True True
print(c is d, c == d) # False True
a += "world"
print(a is b, a == b) # False False
知识点:
- is, is not 对比的是两个变量的内存地址,而==, != 对比的是两个变量的值;
- 如果两个变量指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的,如果指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的;
- 将变量的值修改以后,他将不是原来的自己。
位运算符
位运算相关详情在下一章详细展开,这里简单了解一下:
借助bin()函数,我们可以比较直观的查看运算情况:
print(bin(4)) # 0b100
print(bin(5)) # 0b101
print(bin(~4), ~4) # -0b101 -5
print(bin(4 & 5), 4 & 5) # 0b100 4
print(bin(4 | 5), 4 | 5) # 0b101 5
print(bin(4 ^ 5), 4 ^ 5) # 0b1 1
print(bin(4 << 2), 4 << 2) # 0b10000 16
print(bin(4 >> 2), 4 >> 2) # 0b1 1
运算符优先级
关于运算符的优先级,各大语言基本都是一样的,这里列个表从高优先级到低优先级记录一下: