1. python基础语法


1.语法基础

1.1书写规范

Python最具特色的语法是以缩进的形式来表示代码块,不再需要使用{}。

Python 书写格式一般遵循 PEP 8 编码规范,主要包括以下几个方面:

1. 代码缩进

  • 统一使用 4 个空格 进行缩进,不要使用 Tab。
def example_function():
    for i in range(10):
        print(i)

2. 变量命名

  • 变量、函数名使用 小写字母+下划线(snake_case)
  • 类名使用 首字母大写的驼峰命名(PascalCase)
  • 常量使用 全大写字母+下划线(UPPER_CASE)
max_count = 100  # 变量
def get_user_info():  # 函数
    pass

class StudentInfo:  # 类名
    pass

PI = 3.14159  # 常量

3. 空行规范

  • 顶级定义(类、函数)之间 使用两个空行
  • 方法、函数内部的逻辑分隔使用 单个空行
class MyClass:

    def method_one(self):
        pass

    def method_two(self):
        pass


def my_function():
    print("Hello, World!")

4. 运算符空格

  • 二元运算符(如 =, +, -, *, /, ==)两侧 各空 1 格
  • 不要参数列表函数调用= 两侧加空格
x = 10 + 5  # 正确
y = x * 2   # 正确

def func(arg1=10, arg2=20):  # 正确
    pass

5. 注释规范

  • 行内注释:与代码间隔两个空格,# 后跟 1 个空格
  • 块注释:使用 # 号,每行前有 1 个空格
  • 文档字符串(docstring):使用 """ """ 包裹
# 计算圆的面积
def calculate_area(radius):
    """计算并返回圆的面积"""
    return 3.14 * radius ** 2  # 使用 π 计算面积

6. 导入模块

  • 标准库第三方库自定义库,三类 分组导入
  • import 语句 按字母顺序排列,且尽量 每个库占一行
import os
import sys

import numpy as np
import pandas as pd

from my_project import my_module

7. 行长度

  • 单行最多 79 个字符
  • 长行换行时,推荐使用 括号包裹,避免使用 \
data = (
    "This is a very long string that "
    "needs to be wrapped properly."
)

8. 函数与类

  • 类的方法的第一个参数必须是 self
  • 类方法的第一个参数必须是 cls
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def from_birth_year(cls, name, year):
        return cls(name, 2025 - year)

这些是 Python 代码书写的基本格式规范,遵循这些规则能让代码更清晰、更易读!🚀

1.2 语法特点

1. 注释规则

单行注释:以#开头,为了增加可读性建议在#后加一个空格,然后再写上相应的文字说明

# 这是一个单行注释

多行注释:三个单引号或者三个多引号将注释括起来

'''
单引号注释
单引号注释
'''

"""
这是一个使用三双引号的多行注释
同样可以用于详细说明代码的相关信息
"""

2. 语句换行

如果一个语句太长,全部写在一行不太美观可以使用 \ 来实现换行

x = "床前明月光,\
疑似地上霜,\
举头望明月,\
低头思故乡。"

被()、[ ]、{ }包括起来的语句不用使用 \ 可以直接分成多行。

print("这是一个"
      "分行的"
      "例子")

Python允许将多个语句写在同一行,语句之间用分号隔开。

a = 10;b=20;print(a+b)
# 同一行书写多个语句会使代码的可读性大大降低

3. 模块导入

模块分为内置模块和非内置模块,内置模块会在Python启动时自动导入。非内置模块需要手动导入。格式如下:

import 模块名

1.3 标准输入/输出

1. 标准输入

在 Python 中,使用 input() 函数进行标准输入,它会暂停程序的执行,等待用户从键盘输入内容,直到用户按下回车键。input() 函数会将用户输入的内容作为字符串返回。

基本用法

# 获取用户输入的姓名
name = input("Please enter your name: ")
print(f"Hello, {name}!")

处理不同类型的输入

由于 input() 函数返回的是字符串类型,如果需要处理其他类型的数据,如整数或浮点数,需要进行类型转换

# 获取用户输入的整数
age_str = input("Please enter your age: ")
age = int(age_str)  # 将字符串转换为整数
print(f"Next year, you will be {age + 1} years old.")

# 获取用户输入的浮点数
height_str = input("Please enter your height (in meters): ")
height = float(height_str)  # 将字符串转换为浮点数
print(f"Your height in centimeters is {height * 100} cm.")

2. 标准输出

在 Python 中,使用 print() 函数进行标准输出,它可以将指定的内容打印到控制台。

基本用法

# 打印字符串
print("Hello, World!")
# 打印数字
print(123)
# 打印多个值,用逗号分隔,默认会用空格连接
print("The answer is", 42)

格式化输出

为了使输出更加美观和符合特定的格式要求,Python 提供了多种格式化输出的方法。

  1. 旧式字符串格式化(使用 % 操作符)
name = "Alice"
age = 25
print("My name is %s and I am %d years old." % (name, age))

使用m.n的形式可以实现数据的宽度和精度设置 n在控制精度的同时会进行四舍五入

num = 13.231
print("设置宽度为10,精度为2的数据:%10.2f"%num)
#运行结果为:设置宽度为10,精度为2的数据:     13.23
  1. 新式字符串格式化(使用 str.format() 方法)
name = "Bob"
age = 30
print("My name is {} and I am {} years old.".format(name, age))
  1. f - 字符串(Python 3.6 及以上版本支持)
name = "Charlie"
age = 35
print(f"My name is {name} and I am {age} years old.")

1.4 字面量

在编程中,字面量(Literal)是用于表达一个固定值的表示法,也就是在代码中直接给出的常量值。不同的数据类型有不同形式的字面量,下面为你详细介绍 Python 中常见的数据类型及其对应的字面量形式:

1. 数字字面量

  • 整数(Integer):由数字组成,可正可负,没有小数点。例如:
# 正整数
positive_integer = 10
# 负整数
negative_integer = -20
  • 浮点数(Float):表示带有小数部分的数字,使用小数点来分隔整数部分和小数部分。也可以使用科学计数法表示。例如:
# 普通浮点数
float_number = 3.14
# 科学计数法表示的浮点数
scientific_float = 1.23e-4  # 相当于 1.23 * 10^(-4)
  • 复数(Complex):由实数部分和虚数部分组成,虚数部分以 jJ 结尾。例如:
complex_number = 2 + 3j

2. 字符串字面量

字符串是由零个或多个字符组成的序列,可以使用单引号(')、双引号(")或三引号('''""")来表示。

# 单引号字符串
single_quoted_string = 'Hello, World!'
# 双引号字符串
double_quoted_string = "Python is great"
# 三引号字符串,常用于多行字符串
multi_line_string = '''This is a
multi-line
string.'''

3. 布尔字面量

布尔类型只有两个值:TrueFalse,用于表示逻辑上的真和假。

is_valid = True
has_error = False

4. 空值字面量

在 Python 中,使用 None 来表示空值或缺失值,通常用于初始化变量或者表示函数没有返回值。

result = None

5. 列表字面量

列表是一种可变的有序序列,使用方括号([])来表示,元素之间用逗号分隔。

numbers = [1, 2, 3, 4, 5]
mixed_list = [1, 'apple', True]

6. 元组字面量

元组是一种不可变的有序序列,使用圆括号(())来表示,元素之间用逗号分隔。

point = (3, 4)
single_element_tuple = (1,)  # 只有一个元素的元组需要在元素后面加逗号

7. 集合字面量

集合是一种无序且唯一的数据结构,使用花括号({})来表示,元素之间用逗号分隔。注意,空集合不能直接用 {} 表示,因为 {} 表示空字典,空集合需要使用 set() 来创建。

fruits = {'apple', 'banana', 'cherry'}

8. 字典字面量

字典是一种无序的键值对集合,使用花括号({})来表示,键和值之间用冒号(:)分隔,键值对之间用逗号分隔。

person = {'name': 'John', 'age': 30, 'city': 'New York'}

1.5 变量和常量

1. 变量

概念

变量是存储数据的容器,在程序运行过程中,变量的值可以被改变。你可以把变量想象成一个贴了标签的盒子,标签就是变量名,盒子里装的东西就是变量的值。

变量的命名规则

  • 只能包含字母、数字和下划线:变量名可以由字母(大写或小写)、数字和下划线组成,但不能以数字开头。例如,my_variable 是合法的,而 123variable 是不合法的。
  • 区分大小写:在 Python 中,大写字母和小写字母被视为不同的字符。例如,myVarmyvar 是两个不同的变量。
  • 不能使用 Python 的关键字:Python 有一些具有特殊意义的关键字,如 ifelsefor 等,不能将这些关键字用作变量名。

变量的声明和赋值

在 Python 中,不需要提前声明变量的类型,当你给一个变量赋值时,Python 会自动根据值的类型来确定变量的类型。赋值使用等号(=),等号左边是变量名,右边是要赋给变量的值。

# 给变量赋值
name = "Alice"  # 字符串类型
age = 25  # 整数类型
height = 1.65  # 浮点数类型
is_student = True  # 布尔类型

变量值的修改

变量的值可以在程序的不同地方被修改,通过再次赋值即可。

x = 10
print(x)  # 输出: 10
x = 20
print(x)  # 输出: 20

2. 常量

概念

常量是一种特殊的变量,其值在程序运行过程中不应该被改变。不过,Python 并没有内置的常量类型,通常使用命名约定来表示常量。

常量的命名约定

在 Python 中,通常将常量名全部使用大写字母,单词之间用下划线分隔。虽然这种命名方式并不能真正限制常量的值不被修改,但它是一种约定俗成的规范,提醒开发者不要去修改这个变量的值。

# 定义常量
PI = 3.14159
MAX_USERS = 100

常量值的不可修改性

虽然 Python 没有强制限制常量的值不能被修改,但按照编程规范,不应该对常量进行重新赋值。如果不小心修改了常量的值,可能会导致程序出现难以调试的问题。

PI = 3.14159
# 不建议这样做,但 Python 不会阻止
PI = 3.2  
print(PI)  # 输出: 3.2

总结来说,变量是用于存储可以变化的数据,而常量是用于存储不应该被改变的数据,在 Python 中通过命名约定来区分它们。合理使用变量和常量可以让代码更加清晰和易于维护。

1.6 数据类型

1. 数据类型

1. 数值类型

  • 整数(int:表示整数,可正可负,没有小数部分。
num = 10
print(type(num))  # <class 'int'>
  • 浮点数(float:表示带有小数部分的数字。
f_num = 3.14
print(type(f_num))  # <class 'float'>
  • 复数(complex:由实部和虚部组成,虚部用 jJ 表示。
c_num = 2 + 3j
print(type(c_num))  # <class 'complex'>

2. 序列类型

  • 字符串(str:表示文本,用单引号、双引号或三引号(多行)括起来。
s = "Hello, World!"
print(type(s))  # <class 'str'>
  • 列表(list:可变的、有序的序列,可包含不同类型的元素。
lst = [1, 2, 'a']
print(type(lst))  # <class 'list'>
  • 元组(tuple:不可变的、有序的序列,可包含不同类型的元素。
tup = (1, 2, 'a')
print(type(tup))  # <class 'tuple'>

3. 映射类型

  • 字典(dict:无序的键值对集合,键必须是不可变类型,值可以是任意类型。
dic = {'name': 'Alice', 'age': 20}
print(type(dic))  # <class 'dict'>

4. 集合类型

  • 集合(set:无序的、唯一元素的集合。
s1 = {1, 2, 3}
print(type(s1))  # <class 'set'>
  • 冻结集合(frozenset:不可变的集合。
fs = frozenset([1, 2, 3])
print(type(fs))  # <class 'frozenset'>

5. 布尔类型(bool

表示真(True)或假(False)。

b = True
print(type(b))  # <class 'bool'>

6. (补)字符串的操作方法

1. 索引操作

字符串是一个有序的字符序列,可以通过索引来访问单个字符。在 Python 中,索引从 0 开始,也可以使用负数索引,负数索引从 -1 开始,表示从字符串的末尾开始计数。

s = "Hello, World!"
# 正向索引
print(s[0])  # 输出 'H'
print(s[7])  # 输出 'W'

# 负向索引
print(s[-1])  # 输出 '!'
print(s[-6])  # 输出 'W'
2. 连接操作

可以使用 + 运算符将两个或多个字符串连接成一个新的字符串。

s1 = "Hello"
s2 = " World!"
s3 = s1 + s2
print(s3)  # 输出 'Hello World!'
3. 复制操作

使用 * 运算符可以将字符串复制指定的次数。

s = "abc"
s_repeated = s * 3
print(s_repeated)  # 输出 'abcabcabc'
4. 切片操作

切片操作允许从字符串中提取子字符串。语法为 [start:stop:step],其中 start 是起始索引(包含),stop 是结束索引(不包含),step 是步长(可选,默认为 1)。

s = "Hello, World!"
# 提取从索引 0 到索引 4 的子字符串
print(s[0:5])  # 输出 'Hello'

# 省略 start,默认从 0 开始
print(s[:5])  # 输出 'Hello'

# 省略 stop,默认到字符串末尾
print(s[7:])  # 输出 'World!'

# 使用负索引
print(s[-6:-1])  # 输出 'World'

# 使用步长
print(s[::2])  # 输出 'Hlo ol!'
5. 常用方法

查找和替换

  • find(sub[, start[, end]]):返回子字符串sub在字符串中第一次出现的索引,如果未找到则返回 -1。
s = "hello world"
print(s.find("world"))  # 输出: 6
  • rfind(sub[, start[, end]]):返回子字符串sub在字符串中最后一次出现的索引,如果未找到则返回 -1。
s = "hello world, world"
print(s.rfind("world"))  # 输出: 13
  • index(sub[, start[, end]]):与find()方法类似,但如果未找到子字符串会抛出ValueError异常。
s = "hello world"
try:
    print(s.index("world"))  # 输出: 6
except ValueError:
    print("Substring not found")
  • rindex(sub[, start[, end]]):与rfind()方法类似,但如果未找到子字符串会抛出ValueError异常。
s = "hello world, world"
try:
    print(s.rindex("world"))  # 输出: 13
except ValueError:
    print("Substring not found")
  • replace(old, new[, count]):将字符串中的所有old子字符串替换为new子字符串,count参数指定替换的次数。
s = "hello world"
print(s.replace("world", "python"))  # 输出: hello python

大小写转换

  • upper():将字符串中的所有小写字母转换为大写字母。
s = "hello"
s_upper = s.upper()
print(s_upper)  # 输出 'HELLO'
  • lower():将字符串中的所有大写字母转换为小写字母。
s = "HELLO"
s_lower = s.lower()
print(s_lower)  # 输出 'hello'
  • title():将字符串中每个单词的首字母转换为大写,其余字母转换为小写。
s = "hello world"
s_title = s.title()
print(s_title)  # 输出 'Hello World'
  • s.capitalize():仅首字母大写,其余小写
  • s.swapcase():大小写互换

去除空白字符

  • strip([chars]):返回一个新字符串,去除字符串开头和结尾的指定字符(默认为空白字符)。
s = "  hello  "
s_stripped = s.strip()
print(s_stripped)  # 输出 'hello'
  • lstrip([chars]):去除字符串开头的指定字符。
  • rstrip([chars]):去除字符串结尾的指定字符。

分割和连接

  • split(sep=None, maxsplit=-1):根据指定的分隔符sep将字符串分割成一个列表,maxsplit参数指定最大分割次数。
s = "hello,world,python"
print(s.split(","))  # 输出: ['hello', 'world', 'python']

split() 方法若不传入参数,默认会以任意空白字符(像空格、制表符、换行符等)作为分隔符来分割字符串,并且会把结果里的空字符串去除。

  • rsplit(sep=None, maxsplit=-1):与split()方法类似,但从字符串的右侧开始分割。
s = "hello,world,python"
print(s.rsplit(",", 1))  # 输出: ['hello,world', 'python']
  • splitlines([keepends]):根据换行符将字符串分割成一个列表,keepends参数指定是否保留换行符。
s = "hello\nworld\npython"
print(s.splitlines())  # 输出: ['hello', 'world', 'python']
  • join(iterable):将可迭代对象中的字符串元素连接成一个字符串,使用调用该方法的字符串作为分隔符。
words = ["hello", "world", "python"]
print(", ".join(words))  # 输出: hello, world, python

判断字符串特征

  • startswith(prefix[, start[, end]]):判断字符串是否以指定前缀 prefix 开头。
s = "Hello, World!"
print(s.startswith("Hello"))  # 输出 True
  • endswith(suffix[, start[, end]]):判断字符串是否以指定后缀 suffix 结尾。
s = "Hello, World!"
print(s.endswith("World!"))  # 输出 True
  • isalpha():判断字符串是否只包含字母。
s = "Hello"
print(s.isalpha())  # 输出 True
  • isdigit():判断字符串是否只包含数字。
s = "123"
print(s.isdigit())  # 输出 True
  • isalnum():判断字符串是否只包含字母和数字。
s = "hello123"
print(s.isalnum())  # 输出: True
  • isspace():判断字符串是否只包含空白字符。
s = "   "
print(s.isspace())  # 输出: True

count(sub[, start[, end]]):统计sub出现次数

center(width, fillchar):将字符串居中显示,并使用指定的填充字符填充剩余的位置。

ljust(width, fillchar):将字符串左对齐,并使用指定的填充字符填充剩余的位置。

rjust(width, fillchar):将字符串右对齐,并使用指定的填充字符填充剩余的位置。

zfill(width) :将字符串右对齐,并用零填充到指定的宽度。

2. 数据类型转换

1. 数值类型转换

  • int():将其他数据类型转换为整数。
# 浮点数转整数,直接截断小数部分
num1 = int(3.14)  
print(num1)  # 3

# 字符串转整数,字符串必须是合法的整数表示
num2 = int('10')  
print(num2)  # 10
  • float():将其他数据类型转换为浮点数。
# 整数转浮点数
f1 = float(10)  
print(f1)  # 10.0

# 字符串转浮点数,字符串必须是合法的数字表示
f2 = float('3.14')  
print(f2)  # 3.14

2. 序列类型转换

  • str():将其他数据类型转换为字符串。
s1 = str(10)
print(s1)  # '10'

s2 = str([1, 2, 3])
print(s2)  # '[1, 2, 3]'
  • list():将其他可迭代对象转换为列表。
lst1 = list('abc')
print(lst1)  # ['a', 'b', 'c']

lst2 = list((1, 2, 3))
print(lst2)  # [1, 2, 3]
  • tuple():将其他可迭代对象转换为元组。
tup1 = tuple([1, 2, 3])
print(tup1)  # (1, 2, 3)

tup2 = tuple('abc')
print(tup2)  # ('a', 'b', 'c')

3. 集合类型转换

  • set():将其他可迭代对象转换为集合。
s1 = set([1, 2, 2, 3])
print(s1)  # {1, 2, 3}

s2 = set('abc')
print(s2)  # {'a', 'b', 'c'}
  • frozenset():将其他可迭代对象转换为冻结集合。
fs = frozenset([1, 2, 3])
print(fs)  # frozenset({1, 2, 3})

4. 布尔类型转换

  • bool():将其他数据类型转换为布尔值。
# 以下值转换为布尔值为False
print(bool(0))  # False
print(bool(0.0))  # False
print(bool(''))  # False
print(bool([]))  # False
print(bool(()))  # False
print(bool({}))  # False
print(bool(None))  # False

# 其他值转换为布尔值为True
print(bool(1))  # True
print(bool('a'))  # True
print(bool([1]))  # True

5. 字典转换

字典没有直接的内置转换函数,但可以通过 dict() 函数结合可迭代对象(如包含键值对元组的列表)来创建字典。

# 从包含键值对元组的列表创建字典
dic = dict([('name', 'Alice'), ('age', 20)])
print(dic)  # {'name': 'Alice', 'age': 20}

1.7 运算符与表达式

1. 算术运算符

运算符 描述 示例 (a = 10, b = 3) 结果
+ 加法 a + b 13
- 减法 a - b 7
* 乘法 a * b 30
/ 除法(浮点) a / b 3.3333
// 整除(返回商的整数部分) a // b 3
% 取模 a % b 1
** 幂运算(a的b次幂) a ** b 1000

2. 赋值运算符

运算符 示例 等价于 结果 (x = 5)
= x = 5 x = 5 5
+= x += 2 x = x + 2 7
-= x -= 1 x = x - 1 6
*= x *= 3 x = x * 3 18
/= x /= 2 x = x / 2 9.0
//= x //= 2 x = x // 2 4
%= x %= 2 x = x % 2 0
**= x **= 2 x = x ** 2 16

3. 比较运算符

运算符 描述 示例 (a = 5, b = 3) 结果
== 等于 a == b False
!= 不等于 a != b True
> 大于 a > b True
< 小于 a < b False
>= 大于等于 a >= b True
<= 小于等于 a <= b False

4. 逻辑运算符

运算符 描述 示例 (x = True, y = False) 结果
and 逻辑与 x and y False
or 逻辑或 x or y True
not 逻辑非 not x False

5. 位运算符

运算符 描述 示例 (a = 5, b = 3) 结果
& 按位与 a & b 1
| 按位或 `a
^ 按位异或 a ^ b 6
~ 按位取反 ~a -6
<< 左移位 a << 1 10
>> 右移位 a >> 1 2

6. 成员运算符

运算符 描述 示例 (lst = [1, 2, 3]) 结果
in 是否存在 2 in lst True
not in 是否不存在 4 not in lst True

7. 身份运算符

运算符 描述 示例 (a = [1, 2], b = a, c = [1, 2]) 结果
is 是否是同一对象 a is b True
is not 是否不是同一对象 a is not c True

8. 运算符优先级(从高到低)

优先级 运算符 说明
1 ** 幂运算
2 ~ + - 按位取反, 正负号
3 * / // % 乘, 除, 整除, 取模
4 + - 加, 减
5 >> << 位移运算
6 & 按位与
7 ^ |
8 == != > < >= <= 比较运算
9 not and or 逻辑运算
10 is in 身份和成员运算

0 条评论

发表评论

暂无评论,欢迎发表您的观点!