引言

  1. 一个Python程序由多个模块构成,一般一个模块对应一个文件,每个模块由多条语句构成。
  2. 连续换行使用\

    注意:以下输出结果为“ab cd”,之间5个空格

    print("ab \
        cd")
  3. PythonUnix时间戳表示时间,以1970年为起始,获取时间需引入time模块

    import time
    print(time.time())
    
    # 结果为1773146721.7327766,整数部分为秒

一切皆对象

  • 对象由标识(ID)类型(Type)值(Value)构成
  • 其中,标识为地址,用于变量引用对象
  • 变量携带标识(ID)储存于栈(Stack)中,对象储存于堆(Heap)
  • Python中,不需要显性声明变量的类型(Type),解释器能够根据引用的对象自动确定其类型
  • 创建变量的过程称为声明,变量通过=符号引用对象的过程称为赋值
  • 当变量被del语句删除后,相应的、未被引用的对象会被垃圾回收器删除

变量命名规则和规范

变量命名规范

  • 仅可使用字母、数字和_,且不能以数字开头
  • 不能使用关键词
  • 尽量不使用以__开头和结尾的特殊标识符,如__init__

变量命名规范

  • 模块、函数:全小写英文,用_连接单词,如my_modulemy_method
  • 类名:驼峰原则,不用_连接单词,如MyClass
  • 常量:全大写英文,用_连接单词,如MY_CONST
注意:Python的常量为伪常量,可被修改

变量的赋值

a, b = 100 # 链式赋值
a, b = 1, 2 # 系列解包赋值

a, b = b, a # 利用系列解包赋值,交换变量
‘’‘
过程为先获取等号右边的变量所引用对象的地址,再依次赋值给等号左边的变量
’‘’

变量的基本类型

  • 整型

    • 进制:二进制为0b,八进制为0o,十六进制为0x
    • 转换:使用int()进行强制转换,注意浮点字符串型不能转换

      >>> int("1.23")
      Traceback (most recent call last):
        File "<python-input-0>", line 1, in <module>
          int("1.23")
          ~~~^^^^^^^^
      ValueError: invalid literal for int() with base 10: '1.23'
      >>>
      强制转换会直接丢弃小数部分,不四舍五入,如需则使用round()函数
  • 浮点型

    • 表示:可以用小数表示1.23,也可以科学计数法表示123e-2
    • 转换:

      • 自然转换:1+0.23=1.23
      • 强制转换:float()
  • 布尔型:

    • 只有TrueFalse两种类型
    • 本质为10,可作为整型参与算数运算
  • 字符串型:

    • 只有字符串型(如"abc"),而没有字符型
    • 常用的转义字符包括换行符(\n)制表符(\t)
    • 字符串型本身不可改变,看似改变的任何操作实质均为生成新的对象
    • 编码:

      • Python中,字符串使用Unicode编码
      • 可以使用ord()chr()函数进行整型字符串型的映射转换
    • 创建:

      • 单引号和双引号均可,可使用不同类型引号嵌套,这种情况下不使用引号的转义字符

        str = "I'm hungry! Python解释器识别到引号后会寻找下一个同类引号作为结束标志"
      • 多行字符串保留格式

        str = """
        ab
          cd1
           23
        """
    • 操作:

      • 输入字符串:input("prompt")
      • 输出字符串:print(str, end="")

        1. print()自动将非字符串型强制转换字符串型
        2. end参数可以指定结尾打印字符,默认为\n,不换行可以留空
      • 复制字符串:"str"*3
      • 获取字符串长度:len(str)
      • 提取字符串字符:"string"[2]等价于"string[-4]"
      • 替换字符串字符:"strlng".replace("l", "i")
      • 分割字符串:

        • 返回字符串型str[起始:终止:步长],逆序为str[::-1]
        • 返回列表"str@ing@123".split("@")
      • 拼接字符串:

        • "str"+"ing"等价于"str""ing"
        • "分隔符".join(string_list)

          join()效率高于+,区别在于前者只创建一次对象,后者逐步创建不同对象

变量的运算及其优先级

变量的位运算

  • 按位与&,按位或|,按位非~,按位异或^(按位相同为0
  • 位左移<<,位右移>>(高位补0,低位丢弃
补充:常用a<<2a>>2获得a乘以/除以2的值

变量的四则运算

  • +,减-,乘x
  • 整数除法//和浮点数除法/
补充:取余%,还可使用divmod(a, b)同时获得a除以b的商和余

变量的赋值运算

  • =+=-=*=//=/=
  • %=**=

    a,b = 100, 200
    a += (b+10)*2
    print(a)
    
    # 结果为520,等号右边看成一个整体

变量的运算符优先级

从高到低的顺序排列
  1. 指数运算符:**
  2. 位运算符和四则运算符
  3. 比较运算符:<=<>>=

    等于运算符:==!=

  4. 赋值运算符
  5. 身份运算符:isis not

    成员运算符:innot in

  6. 逻辑运算符:notorand

补充:

  • is运算符比较地址==运算符比较,在判断变量是否为None时优先使用is运算符
  • 使用and运算符,一旦遇到False,随后的表达式都不参与运算

字符串专题拓展

拓展1:进阶知识

  1. 常量字符串在堆中只保存一份
  2. 比较字符串的地址(ID)用身份运算符is,比较字符串的值(Value)用等于运算符==
  3. 可以使用成员运算符innot in确定子字符串是否在某字符串中

拓展2:常用方法

查找

对于字符串str = "abc123"

方法名称方法说明返回结果
len(str)返回str的长度6
str.startswith("a")是否以字符串"a"开头True
str.endswith("a")是否以字符串"a"结尾False
str.find("b")第一次出现字符串"b"的位置1
str.rfind('b')最后一次出现字符串"b"的位置1
str.count('c')字符串"c"累计出现的次数1
str.isalnum()str是否全是字母或数字True
去除首位

对于字符串str = "**abc*123**"

方法名称方法说明返回结果(新字符串)
" s t r ".strip()去除首尾所有的空格"s t r"
str.strip("*")去除首尾所有的*"abc*123"
str.lstrip("*")去除开头所有的*"abc*123**"
str.rstrip("*")去除结尾所有的*"**abc*123"
大小写转换

对于字符串str = "im chimeRa"

方法名称方法说明返回结果(新字符串)
str.capitalize()开头首字母大写Im chimeRa
str.title()所有首字母大写Im ChimeRa
str.upper()小写转大写IM CHIMERA
str.lower()大写转小写im chimera
str.swapcase()所有大小写颠倒IM CHIMErA
格式排版

对于字符串str = "abc"

方法名称方法说明返回结果(新字符串)
str.center(7)居中对齐 abc
str.center(7, "@")@居中对齐@@abc@@
str.ljust(7, "@")@左对齐@@@@abc
str.rjust(7, "@")@右对齐abc@@@@
特征判断
方法名称方法说明
str.isalnum()是否仅为字母或数字
str.isalpha()是否仅为字母
str.isdigit()是否仅为数字
isspace()是否为空白字符
isupper()是否为大写字母
islower()是否为小写字母

注意:

>>> '123.45'.isdigit()
False

拓展3:格式化字符串

基础语法:由{}:组成

# 按顺序格式化
str1 = "我在学{0}语言,我学了{1}天,{0}使我快乐!"
print(str1.format("Python", 10))

# 按参数名格式化
str2 = "我在学{language}语言,我学了{days}天,{language}使我快乐?"
print(str2.format(days=10000, language="Java"))

填充对齐:

  1. :后接填充的字符,仅限1个,默认为空格
  2. 居中对齐是^、左对齐是<、右对齐是>,后面接宽度
>>> print("{:o>5}".format("abc"))
ooabc

数字格式化:浮点数带f,整数带d

str = "第一个数是{0:>5d},第二个数是{1:1.2f}"
str.format(123, 10.245)
print(str) # 别被坑了
print(str.format(321, 20.789))

‘’‘
结果为:
第一个数是{0:>5d},第二个数是{1:1.2f}
第一个数是  321,第二个数是20.79
’‘’

拓展4:可变字符串

若要进行字符串的原位修改,即在堆中仅改变值而不改变字符串的地址,需使用io.StringIO对象。

import io

str = "abcccc"
print(str) # abcccc

editable_str = io.StringIO(str)
print(editable_str) # <_io.StringIO object at 0x000001F7BC95F2E0>
editable_str.getvalue() # 'abcccc'

editable_str.seek(3)
editable_str.write("dd")
print(editable_str) # <_io.StringIO object at 0x000001F7BC95F2E0>
editable_str.getvalue() # 'abcddc'
最后修改:2026 年 03 月 26 日
如果觉得我的文章对你有用,请随意赞赏