大家好,我是你们的技术小伙伴。今天咱们来聊聊Python的基础知识。无论你是刚接触编程的小白,还是想巩固基础的老手,这篇文章都将带你系统地梳理Python的核心概念。内容涵盖注释、变量、进制、数据类型、输入输出、运算符以及编码规范,每个知识点都配有详细的解释和代码示例,保证让你看得懂、学得会、用得上。
废话不多说,我们直接开始!
注释就是写在代码里,用来解释代码功能的文字。它不会被Python解释器执行,纯粹是给人看的。写注释是一个好习惯,能让自己和别人更容易理解代码的意图。
在Python中,#后面的内容都是注释。例如:
python
# 这是一条单行注释
print("Hello, World!") # 这也是注释,建议在代码和#之间加两个空格建议:#后面跟一个空格,语句和#之间加两个空格,这样更整洁。
用三个单引号或三个双引号括起来的内容,可以跨越多行,常用于函数或模块的说明文档。
python
"""
这是一个多行注释
可以写很多行说明文字
"""注意:多行注释本质上是一个字符串,如果不赋值给变量,它就会被解释器忽略,起到了注释的作用。但不能嵌套使用。
变量就像是一个贴了标签的盒子,我们可以把数据放进盒子里,然后通过标签来找到和使用这个数据。在内存中,变量名对应一个存储空间,里面存放着具体的数据(值)。
可以把变量理解为一个“可以赋值的标签”,它指向特定的值。
Python中创建变量非常简单:变量名 = 值。不需要提前声明类型,赋值后变量就自动存在了。
python
name = "张三"# 字符串
age = 18 # 整数
weight = 65.5 # 浮点数
result = age + 5 # 表达式的结果赋给变量
print(result) # 输出 23还可以同时创建多个变量:
python
a=b=c=10# 三个变量都指向10
x,y,z=1,2,3# x=1, y=2, z=3标识符就是程序中我们自己命名的名字,比如变量名、函数名等。命名必须遵守以下规则:
关键字:Python中有一些特殊用途的单词,不能用作标识符。可以通过keyword模块查看:
python
import keyword
print(keyword.kwlist)常见的关键字有:False、True、None、and、or、not、if、else、for、while、break、continue、def、class、return、import等。
常见的命名风格有三种:
变量的值可以随时修改,Python始终记住最新的值。
python
message = "Hello"
print(message) # Hello
message = "World"
print(message) # WorldPython还支持一种便捷的变量交换:
python
a,b=10,20
a,b=b,a# 交换
print(a,b)# 20 10常量是指在程序运行过程中值不会改变的量。Python没有真正的常量类型,通常约定使用全大写字母来表示常量,提醒开发者不要修改它。
python
PI = 3.14159
MAX_SIZE = 100计算机的世界只有0和1,所有数据最终都要转换成二进制才能存储和运算。了解进制和原码、反码、补码,能帮助我们理解计算机是如何处理数字的。
在Python中,可以用前缀来直接表示不同进制的整数:
python
bin_num = 0b1010 # 二进制,对应十进制10
oct_num = 0o12 # 八进制,对应十进制10
dec_num = 10# 十进制
hex_num = 0xA # 十六进制,对应十进制10内置函数可以方便地进行进制转换:
python
num = 10
print(bin(num)) # 0b1010
print(oct(num)) # 0o12
print(hex(num)) # 0xa规则:从最低位(最右边)开始,每一位乘以2的(位数-1)次方,然后求和。
例如:二进制1011转十进制:
text
1*2^3+0*2^2+1*2^1+1*2^0=8+0+2+1=11规则:不断除以2,记录余数,直到商为0,然后将余数倒序排列。
例如:56转二进制:
text
56÷2=28余0
28÷2=14余0
14÷2=7余0
7÷2=3余1
3÷2=1余1
1÷2=0余1
倒序:111000所以56的二进制是111000。
规则:每一位乘以16的(位数-1)次方,然后求和。
例如:0x34A转十进制:
text
3*16^2+4*16^1+A*16^0=3*256+4*16+10*1=768+64+10=842规则:不断除以16,记录余数(余数大于9时用A~F表示),直到商为0,余数倒序。
例如:356转十六进制:
text
356÷16=22余4
22÷16=1余6
1÷16=0余1
倒序:164所以356的十六进制是0x164。
计算机内部存储整数时,并不是直接存储其二进制原码,而是存储补码。为什么要用补码?我们先来理解三个概念。
举例(8位二进制):
text
+1:原码00000001,反码00000001,补码00000001
-1:原码10000001,反码11111110,补码11111111因为补码可以将减法运算统一为加法运算,简化硬件设计。我们来看一个例子:
用原码计算 2 - 2:
2的原码:00000010
-2的原码:10000010
相加:10000100=-4(错误!)用补码计算 2 - 2:
2的补码:00000010
-2的补码:11111110
相加:100000000,最高位溢出丢弃,得到00000000=0(正确!)所以,补码让符号位也参与运算,并且能自动处理进位,得到正确结果。
10的补码:00001010
-12的原码:10001100→反码:11110011→补码:11110100
相加:00001010+11110100=11111110(这是结果的补码)
将结果的补码转原码:先减1得反码11111101,再取反(符号位不变)得原码10000010=-2
所以10-12=-2,正确。Python是动态类型语言,变量本身没有类型,它只是指向某个对象的“标签”。对象才有类型。Python3中常见的数据类型分为:
其中,不可变类型有:数字、字符串、元组;可变类型有:列表、字典、集合。
Python的整数可以任意大,没有长度限制(只受内存限制)。
浮点数就是带小数点的数,采用双精度(IEEE 754)存储。需要注意浮点数运算存在精度问题:
python
print(0.1 + 0.2) # 0.30000000000000004如果需要精确计算,可以使用decimal模块:
python
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2')) # 0.3浮点数也可以使用科学计数法:1.3e7表示13000000.0。
布尔值只有True和False,用于逻辑判断。在Python3中,bool是int的子类,True和False可以参与数值运算,True相当于1,False相当于0。
python
print(True == 1) # True
print(False == 0) # True
print(Trueis1) # False (is比较的是对象身份,不是值)以下值在布尔上下文中被视为False:
字符串是字符的序列,可以用单引号、双引号、三引号括起来。
python
s1 = 'Hello'
s2 = "World"
s3 = """多行
字符串"""字符串中可以使用转义字符,如\n换行、\t制表符、\\反斜杠等。
常用转换函数:
函数 | 说明 |
int(x) | 将x转换为整数,x为字符串时可指定base |
float(x) | 转换为浮点数 |
str(x) | 转换为字符串 |
bool(x) | 转换为布尔值 |
ord(c) | 返回字符的ASCII/Unicode码 |
chr(i) | 返回整数对应的字符 |
bin(x) | 转二进制字符串 |
oct(x) | 转八进制字符串 |
hex(x) | 转十六进制字符串 |
list(s) | 将序列转为列表 |
tuple(s) | 将序列转为元组 |
set(s) | 转为集合 |
示例:
python
num_str = "123"
num_int = int(num_str) # 123
print(num_int + 10) # 133字符串在计算机中是以某种编码(如UTF-8、GBK)存储为字节序列的。编码是将字符串转为字节,解码是将字节转为字符串。
python
s = "你好中国"
# 编码
b = s.encode('utf-8') # b'\xe4\xbd\xa0...'
print(b)
# 解码
s2 = b.decode('utf-8')
print(s2) # 你好中国注意:编码和解码必须使用相同的字符集,否则会报错或出现乱码。
input()函数用于接收用户键盘输入,返回的永远是字符串。
python
name = input("请输入你的名字:")
print("你好," + name)如果需要数字,记得转换类型:
python
age = int(input("请输入年龄:"))print()可以输出一个或多个对象,默认以空格分隔,以换行结尾。
python
print("Hello", "World", sep=", ", end="!\n") # Hello, World!sep指定分隔符,end指定结尾字符。
类似C语言的printf:
python
name = "Tom"
age = 20
print("我叫%s,今年%d岁" % (name, age))常用格式符:%d整数、%f浮点数、%s字符串、%x十六进制等。
更强大的格式化方法:
python
print("我叫{},今年{}岁".format(name, age))
print("我叫{0},今年{1}岁".format(name, age)) # 指定位置
print("我叫{name},今年{age}岁".format(name="Tom", age=20)) # 关键字参数数字格式化:
python
num = 31415.926
print("{:^20,.2f}".format(num)) # 居中,宽度20,千位分隔,两位小数最简洁的方式,在字符串前加f,用{}直接引用变量:
python
print(f"我叫{name},今年{age}岁")
print(f"{num = :.2f}") # 加上=会打印变量名和值,num = 31415.93用{{和}}可以转义大括号本身。
运算符 | 描述 | 示例 |
+ | 加 | a + b |
- | 减 | a - b |
* | 乘 | a * b |
/ | 除(结果为浮点数) | a / b |
// | 整除(向下取整) | a // b |
% | 取余 | a % b |
** | 幂 | a ** b |
示例:
python
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3
print(10 % 3) # 1
print(2 ** 3) # 8除了基本的=,还有复合赋值运算符:
运算符 | 示例 | 等价于 |
+= | a += 2 | a = a + 2 |
-= | a -= 2 | a = a - 2 |
*= | a *= 2 | a = a * 2 |
/= | a /= 2 | a = a / 2 |
//= | a //= 2 | a = a // 2 |
%= | a %= 2 | a = a % 2 |
**= | a **= 2 | a = a ** 2 |
Python 3.8新增了海象运算符:=,可以在表达式中赋值:
python
if (n := len(s)) > 10:
print(f"字符串太长,有{n}个字符")运算符 | 描述 |
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
比较运算符返回布尔值。注意:不同类型的数据通常不能比较大小(但Python中某些类型如int和float可以比较)。
字符串比较是按字典序逐个字符比较ASCII码:
python
print('5' > '6') # False
print('15' > '6') # False,因为先比较'1'和'6'运算符 | 描述 | 示例 |
and | 与:左边为False则返回左边值,否则返回右边值 | x and y |
or | 或:左边为True则返回左边值,否则返回右边值 | x or y |
not | 非:取反 | not x |
注意:逻辑运算符返回的不一定是布尔值,可能是参与运算的对象本身。
python
print(5 and 8) # 8
print(0 and 8) # 0
print(5 or 8) # 5
print(0 or 8) # 8
print(not 5) # False位运算符直接操作整数的二进制位(以补码形式进行)。
运算符 | 描述 | 示例 |
& | 按位与 | a & b |
| | 按位或 | a | b |
^ | 按位异或 | a ^ b |
~ | 按位取反 | ~a |
<< | 左移 | a << n |
>> | 右移 | a >> n |
注意:负数参与位运算时,要先转换成补码。
示例:
python
a = 17 # 00010001
b = 13 # 00001101
print(a & b) # 1 (00000001)
print(a | b) # 29 (00011101)
print(a ^ b) # 28 (00011100)
print(~a) # -18 (取反得补码11101110,转原码得-18)左移一位相当于乘以2,右移一位相当于整除2。
用于检查一个值是否在序列(字符串、列表、元组等)中。
python
lst = [1, 2, 3]
print(2 in lst) # True
print(5 not in lst) # True比较两个变量是否引用同一个对象(即内存地址相同)。
python
a = [1, 2, 3]
b = a
c = a[:] # 复制一份新列表
print(b is a) # True
print(c is a) # False
print(c == a) # True (值相等)is与==的区别:is比较身份,==比较值。
从高到低(粗略):
如果记不清,用括号明确优先级总没错。
写代码不仅追求正确,还要追求可读性。PEP 8是Python官方推荐的编码风格指南,遵循它能让代码更美观、易维护。
到这里,我们已经把Python最基础、最核心的知识点都过了一遍。从注释、变量,到进制、数据类型,再到输入输出、运算符和编码规范,这些都是编程大厦的基石。看似枯燥,但每一个细节都关乎着你未来写出的代码是否健壮、易读、高效。
记住,学习编程没有捷径,多动手写、多思考才是王道。建议你打开IDE,把文中的示例代码敲一遍,试着改动一些值,观察输出结果。遇到问题不要怕,那是成长的机会。
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、转发,让更多人看到。后续我还会带来更多Python进阶内容,比如函数、模块、文件操作、面向对象等,敬请期待!
加油,未来的Python大牛!