py01_python的基础语法

py01_Python的基础语法

Python作为当今最流行的编程语言之一,以其简洁优雅的语法和强大的功能深受开发者喜爱。本文全面解析Python基础语法核心概念,帮助初学者建立扎实的编程基础。

1. 注释:代码的自我说明

  • **概述:**注释是代码中不被执行的文本,用于解释代码功能、设计思路和使用方法,显著提升代码可读性和可维护性。在团队协作和长期项目中,良好的注释习惯至关重要。
  • 核心作用:
    • 提高代码可读性,帮助开发者(包括自己)理解代码逻辑
    • 临时屏蔽调试中的代码片段
    • 记录代码设计思路、修改历史等关键信息
  • 分类和语法:
    • 单行注释:
      • 语法:以 # 开头,其后为注释内容(# 与内容间建议加空格,增强可读性)
      • 范围:仅对当前行 # 后的内容生效,换行后注释失效
      • 位置:可单独成行,也可置于代码末尾(需与代码间隔至少 1 个空格,一般是2个空格)
      • 快捷键(PyCharm 等 IDE):Ctrl + /(批量注释 / 取消注释多行)
    • 多行注释:
      • 语法:使用三对引号(单引号 ''' 或双引号 """)包裹,引号内可自由换行
      • 注意事项:
        • 不可直接置于代码末尾(会被解释器视为字符串字面量,可能导致语法错误)
        • 三对引号包裹的注释本质是未被赋值的字符串常量,若误写在表达式中可能引发逻辑问题
      • 多行注释没有快捷键,如果对于多行数据内容进行Ctrl + /则对于每一行数据进行单行注释
  • 最佳实践:
    • 注释应 “说明为什么做,而非怎么做”(代码本身已体现执行逻辑)
    • 避免过度注释(如 obvious 的代码无需注释)
    • 保持注释与代码同步更新(过时的注释比无注释更有害)
    • 特殊符号(如 #、引号)必须使用英文标点,否则会触发语法错误(SyntaxError
  • 代码示例:
    # print('hello world')  # 注释的内容不会被执行
    print('单行注释可以放置在代码末尾')  # 单行注释
    # SyntaxError: invalid syntax  语法错误
    # print('多行注释不能放置在代码末尾') '''多行注释不能写在代码末尾'''
    '''多行注释
    多行注释内部可以随意换行,
    注释效果依然存在
    '''
    """
    多行注释,既可以使用单引号,又可以使用多引号,只要引号是三对即可
    """
    
    

2. 变量:数据的“容器”

  • 概述:变量是程序中用于临时存储数据的标识符。
  • 核心特性:
    • 容器:存储各种类型数据的载体,通过变量名可访问数据
    • 临时:数据存储在内存中,程序结束后或内存释放后消失
    • 可变:运行中可通过重新赋值修改存储的数据
    • 引用:变量本质是 “指向内存中数据的引用”,而非数据本身
  • 基本操作:
    • 定义:变量名 = 变量值= 为赋值运算符,非数学中的等号)
    • 调用:直接使用变量名即可访问其存储的数据
    • 修改:通过重新赋值改变变量指向的数据(原数据若无人引用会被内存回收)
  • 命名最佳实践:
    • 使用描述性名称(如customer_count而非cc
    • 区分大小写(ageAge不同)
    • 避免保留字(如class, def等)
    • 遵循PEP8规范(小写+下划线)
  • 代码示例:
    # 变量的定义格式: 变量名 = 变量值
    name = 'Tom'
    age = 18
    is_student = True
    # 变量的调用格式: 直接使用变量名即可调用变量中的数据
    print(name)
    print(age)
    print(is_student)
    # 在程序运行过程中还可以修改变量的值
    age = 19
    print(age)
    
    

3. 数据类型:数据的本质

  • 概述:Python 是动态类型语言,变量类型由赋值的数据自动推导,无需手动声明,且可随赋值变化而改变。
  • Python数据类型体系:
    类型表示示例特性
    整型(int)整数count = 42无大小限制
    浮点型(float)小数pi = 3.14159双精度浮点
    布尔型(bool)逻辑值is_valid = TrueTrue/False
    字符串(str)文本name = "Bob"不可变序列
    列表(list)有序集合colors = ["red", "green"]可变
    元组(tuple)不可变集合point = (10, 20)不可变
    字典(dict)键值对user = {"name": "Alice"}键唯一
    集合(set)无序唯一ids = {101, 102, 103}元素唯一
  • 特点:
    • 不同的数据类型在不同的存储区域
    • 不同的数据类型使用的数据结构不同
    • 不同的数据类型占用的空间大小不同
    • 不同的数据类型具备的功能不同
  • 提示:
    • 类型查询:使用 type(变量/数据) 函数
    • 未定义变量调用:会触发 NameError(必须先定义后使用)
    • 命名建议:变量名应 “见名知意”(如 age 存储年龄,price 存储价格),与类型无关
  • 代码示例:
    # 整型
    num = 10
    print(num)          # 10
    print(type(num))    # <class 'int'>
    
    # 浮点型
    price = 12.5
    print(price)        # 12.5
    print(type(price))  # <class 'float'>
    
    # 布尔型
    has_error = False
    print(has_error)        # False
    print(type(has_error))  # <class 'bool'>
    
    # 字符串类型
    #在python中 数据左右两侧加引号的都是字符串类型,可以是单引号也可以是双引号,但是必须是成对,不能一单一双
    name = 'euler'
    print(name)             # euler
    print(type(name))       # <class 'str'>
    
    # 变量需要先定义再调用,如果该变量名没有被定义则会报错
    # print(age)  # NameError: name 'age' is not defined
    age = 19
    print(age)
    print(type(age))
    
    # 变量名和变量类型没有关系,但是使用时尽可能的见名知意
    float1 = 'float'
    print(float1)           # float
    print(type(float1))     # <class 'str'>
    
    

4. 标识符和关键字:命名的 “规则与禁忌”

  • 概述:
    • **标识符:**程序员自己定义的,有特殊功能的字符组合
    • **关键字:**系统或者Python定义的,有特殊功能的字符组合,程序员定义标识符不能使用关键字
  • 标识符的命名规则:
    • 组成:只能包含字母(A-Z/a-z)、数字(0-9)、下划线(_)
    • 开头:不能以数字开头
    • 关键字:不能使用 Python 内置关键字(如 iffor
    • 大小写:严格区分(nameName 是两个不同变量)
  • 标识符的命名规范:
    • 大驼峰命名法:每个单词首字母大写
    • 小驼峰命名法:除了首字母外其余单词首字母大写,studentSystem
    • 下划线分隔法:单词中间用下划线分隔开,也叫蛇形命名法
    • 标识符要做到见名知意,增强代码的可读性
    • 不要使用单个字母加数字的方式命名,容易混淆
  • 专业命名规范:
    类型规范示例
    变量/函数蛇形命名法calculate_total
    类名大驼峰命名法CustomerAccount
    常量全大写+下划线MAX_CONNECTIONS
    模块小写短名称data_utils.py
  • 代码示例:
    # 只能由字母数字,下划线组成
    a123___456 = 789
    print(a123___456)
    # a123_$_456 = 789      # SyntaxError: invalid decimal literal
    # a123_ _456 = 789      # SyntaxError: invalid decimal literal
    
    # 不能以数字开头
    # 123a = 123            # SyntaxError: invalid decimal literal
    # print(123a)
    
    # 不能使用关键字
    # False = 123           # SyntaxError: cannot assign to False
    # print(False)
    
    # 严格区分大小写
    # a = 10
    # print(A)              # NameError: name 'A' is not defined
    
    

5. 输出:程序的“反馈机制”

  • **概述:**通过 print() 函数向用户输出数据,支持多种输出形式和参数配置。
  • **普通输出:**使用print()函数输出数据
    • 可以输出任意类型的数据或表达式
    • 可以通过变量名进行输出
    • 可以同时输出多个值,默认用空格分隔
  • **格式化输出:**按指定格式输出数据,适用于固定模板中动态替换内容的场景。
    • %占位符输出
      • 格式:“要输出的内容 占位符1,占位符2 …” % (数据1,数据2,…)
      • 占位符:使用特定的符号进行占位,在运行时使用具体的数据将其替换掉
        • 常用的占位符:
          • %s:用来接收字符串数据
          • %d:用来接收整型数据
          • %f:用来接收浮点型数据
        • 使用规范:
          • 可以有一个占位符,也可以有多个
          • 占位符的数量和变量的数量必须保持一致,不能多,也不能少
          • 占位符与变量顺序要依次对应,不能交叉赋值也不能跳跃赋值
          • 占位符与变量一定要数据类型完全对应
          • 在格式化字符串时,百分号后只能识别一个数据,所以如果有多个变量需要使用括号括起来
      • 精度控制:使用格式化拼接字符串的方式,可以进行精度控制
        • %f:浮点型可以保留n位小数 例如%.nf 保留n位小数,保留两位小数时会进行四舍五入
        • %d:可以占n位,位数不足可以用空格或者0补齐,例如%0nd,如果位数不足则使用0补齐,如果原数据超出n位则原样显示
    • str.format()方法(Python 2.6+)
      • 格式:‘要输出的内容{},{} …’.format (数据1,数据2,…)
    • f-string方法(python 3.6+ 推荐)
      • 格式:f’要输出的内容{变量1},{变量2} …’
      • f-string字符串中可以使用大写的F,也可以使用小写的f
      • {}内部可以书写计算式或者表达式也可以调用函数,但是不可以什么也不写,否则报错
      • 精度控制:变量:后不能加空格
        • 保留n位小数:{变量:.2f}
        • 不足位用0补齐:{变量:03d}
    • **注意:**上述三种方式是字符串格式化的方法,是字符串本身的功能,跟输出本身没有关系,当我们需要对字符串进行格式化时都可以使用这三种方法,不是只能用于输出。
  • print()函数参数:
    • sep:多个数据之间的分隔符,默认使用空格进行分隔
    • end:打印结束之后的结束符,默认使用 换行符
  • 代码示例:
    # 普通数据输出
    print(123)  # 输出数值
    print('I love python')  # 输出字符串
    print(1 + 3)  # 输出计算式
    print(False)  # 输出布尔值
    name = 'euler'
    print(name)  # 通过变量名输出
    print(520, 'python', name)  # 可以同时输出多个值
    
    # 输出格式化后的字符串
    # 格式化字符串的格式: '要输出的字符信息 %占位符' % 变量  此时就可以将变量与字符串格式化拼接到一起
    name = 'Alice'
    print('my name is %s' % name)
    # 格式化和print没有任何关系,它只负责输出
    age = 18
    output_str = "I'm %d years old." % age
    print(output_str)
    
    # 多占位符的格式化方式
    name = '小龙女'
    age = 18
    gender = '女'
    # 多占位符格式化字符串方式:'要输入的字符串信息, %占位符1, %占位符2....' % (变量1, 变量2 ....)
    # 占位符一定要数据类型准确,%d 接收整型数据  %f 接收浮点型数据 %s 接收字符串类型数据
    # 占位符的数量一定要和变量的数量匹配
    # print('故事的主角是%s,年龄%d岁,性别为%s' % name, age, gender)       # TypeError: not enough arguments for format string
    # print('故事的主角是%s,年龄%d岁,性别为%s' % (name, age))             # TypeError: not enough arguments for format string
    # print('故事的主角是%d,年龄%d岁,性别为%s' % (name, age, gender))     # TypeError: %d format: a real number is required, not str
    
    print('故事的主角是%s,年龄%d岁,性别为%s' % (name, age, gender))
    print('故事的主角是{},年龄{}岁,性别为{}'.format(name, age, gender))  # str.format()方式
    print(f'故事的主角是{name},年龄{age}岁,性别为{gender}')  # f-string 方式
    
    # 精度控制 —— 对数据进行格式化
    name = '小帅'
    age = 18
    height = 1.88
    money = 9
    
    # 这个男人叫小帅,那一年他18岁,身高1.880000米,身价9个小目标
    print('这个男人叫%s,那一年他%d岁,身高%f米,身价%d个小目标' % (name, age, height, money))
    # 这个男人叫小帅,那一年他18岁,身高1.88米,身价09个小目标
    print('这个男人叫%s,那一年他%d岁,身高%.2f米,身价%02d个小目标' % (name, age, height, money))
    money = 99999
    # 这个男人叫小帅,那一年他18岁,身高1.9米,身价99999个小目标
    print('这个男人叫%s,那一年他%d岁,身高%.1f米,身价%03d个小目标' % (name, age, height, money))
    
    # print()函数详解
    # print函数中有一些参数
    # sep 多个数据之间的分隔符,默认使用空格进行分隔
    # end 打印结束之后的结束符,默认使用 换行符
    
    # 一次打印多个姓名,并且使用逗号进行分隔
    print('黄药师', '欧阳锋', '洪七公')  # 同时打印,但是间隔符默认为空格
    print('黄药师', '欧阳锋', '洪七公', sep=',')  # 一次打印,中间用逗号隔开
    
    # 打印一首诗,每次打印完成后,不使用换行符,而是使用,和。分隔
    print('十步杀一人', end=',')
    print('千里不留行', end='。')
    print('事了拂衣去', end=',')
    print('深藏功与名', end='。')
    
    # 特殊符号: \n(换行符) \t(制表位,就是为了对齐文字,可以理解为多个空格)  按tab键和其效果一致
    print('南帝\n一灯大师')
    print('中神通\t王重阳')
    
    name = '小龙女'
    age = 18
    gender = '女'
    # f-string
    print('故事的主角是%s,年龄%d岁,性别为%s' % (name, age, gender))  # 传统方式
    print(f'故事的主角是{name},年龄{age}岁,性别为{gender}')  # f-string 方式
    print(F'故事的主角是{name},年龄{age}岁,性别为{gender}')  # 可以使用大写F,也可以使用小写f
    # {}内部可以书写计算式或者表达式也可以调用函数,但是不可以什么也不写,否则报错
    # print(f'故事的主角是{},年龄{age+1}岁,性别为{gender}')  # SyntaxError: f-string: valid expression required before '}'
    # 精度控制
    num = 3.1415926
    print(f'保留浮点数的两位{num:.2f}')
    num = 3
    print(f'以3位显示数字,不足位用0补齐{num:03d}')
    
    

6. 输入:用户交互

  • **概述:**输入就是人类向计算机输入数据。
  • 输入函数:input()
  • 特性:
    • input是一个阻塞函数,在运行后会阻塞到input函数的调用位置,等待数据的输入。如果没有输入代码将不会向下继续执行
    • input函数中可以添加提示信息,也就是在让程序员输入数据前提示要输入的内容
    • 通过input函数接收的所有数据都是字符串数据类型
  • 代码示例:
    # input函数中可以添加提示信息,也就是在让程序员输入数据前提示要输入的内容
    # input('请输入您的密码:')
    
    # 可以使用变量接受input输入进来的数据信息
    password = input('请输入您的密码:')
    print(f'您的密码是:{password}')  # 密码是:123
    print(type(password))  # <class 'str'>
    
    

7. 数据类型转换:类型间的桥梁

  • **概述:**不同的数据类型之间进行转换。
  • 转换函数:
    函数目标类型可转换源类型注意事项
    int()整型float,数字字符串字符串需为整数字面量
    float()浮点数int,数字字符串字符串需为数字字面量
    str()字符串所有类型安全转换
    bool()布尔型所有类型非零/非空为True
    eval()根据内容字符串慎用,有安全风险
  • 转换函数详解:
    • int()
      • 可以转换float类型为int,会将小数部分全部清除
      • 可以转换str类型为int,但是字符串内部必须是整型数,否则报错
    • float()
      • 可以转换int类型为float,但是会在整数末尾添加.0
      • 可以转换str类型为float,但是必须是浮点数或者整数,如果是整数同样会在末尾添加.0
    • str()
      • 任何数据类型都能转换为str
    • **eval():**去除字符串左右两侧的引号,内部是什么就运行什么
      • 如果引号里面是一句Python语句,eval之后就会直接执行这个语句
  • 类型转换原则:
    • 显式优于隐式:明确使用转换函数
    • 验证输入:转换前检查数据有效性
    • 异常处理:使用try-except捕获转换错误
    • 避免eval:使用ast.literal_eval替代危险评估
  • 代码示例:
    int1 = 520
    float1 = 3.1415
    str1 = 'hello'
    str2 = '12345'
    str3 = '789.123'
    str4 = 'abc123'
    str5 = '123abc'
    
    # int() 将数据转换为int类型数据
    print(int(float1))  # 3 浮点型可以转换为整型,转换完成后,将小数部分全部删除
    # print(int(str1))          # ValueError: invalid literal for int() with base 10: 'hello'
    print(int(str2))  # 12345 当字符串中是整型数据时,可以转换整型
    # print(int(str3))          # ValueError: invalid literal for int() with base 10: '789.123'
    # print(int(str4))          # ValueError: invalid literal for int() with base 10: 'abc123'
    # print(int(str5))          # ValueError: invalid literal for int() with base 10: '123abc'
    
    # float() 将数据转换为float类型数据
    print(float(int1))  # 520.0 整型可以转换为浮点型数据,转换完成后,添加.0
    # print(float(str1))        # ValueError: could not convert string to float: 'hello'
    print(float(str2))  # 12345.0 当字符串中是整型数据时,可以转换为浮点数,在末尾加.0
    print(float(str3))  # 789.123 当字符串内部是浮点型数据时,可以转换为浮点型
    # print(float(str4))        # ValueError: could not convert string to float: 'abc123'
    # print(float(str5))        # ValueError: could not convert string to float: '123abc'
    
    # str() 将数据转换为str类型数据(所有数据类型都能转换为str类型数据)
    print(str(int1))
    print(str(float1))
    
    # eval() 去除字符串左右两侧的引号,内部是什么就运行什么
    str2 = '12345'
    print(eval(str2))
    print(type(eval(str2)))
    
    str3 = '789.123'
    print(eval(str3))
    print(type(eval(str3)))
    
    str6 = 'False'
    print(eval(str6))
    print(type(eval(str6)))
    
    # 将下方字符串左右两侧的引号去除,就是打印hello world 的代码,所以使用eval可以打印hello world
    eval("print('hello world')")  # hello world
    
    # NameError: name 'age' is not defined
    # 将str7左右两侧的引号去除,age就是一个变量名,但是变量名没有被定义所以会报错
    # 注意: 变量必须先定义再调用
    str7 = 'age'
    print(eval(str7))
    print(type(eval(str7)))
    
    

总结

Python基础语法是编程能力的基石。关键要点总结:

  • 注释是代码文档的核心,使用文档字符串提升可维护性
  • 变量是动态类型的引用容器,命名需清晰规范
  • 数据类型决定操作方式,type()函数辅助类型识别
  • 标识符命名遵循PEP8规范,避免关键字冲突
  • 输入输出实现人机交互,f-string是最佳格式化方案
  • 类型转换需谨慎处理,特别注意eval()的安全风险
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值