python学习-基础学习1

152 阅读14分钟

python学习-基础学习1

本文介绍 python 的基础学习,包括起源发展、应用场景、安装运行、语法变量、运算符、数据类型、输入输出和文件读写等部分。

供自己以后查漏补缺,也欢迎同道朋友交流学习。

引言

大家好,终于顶不住别人的劝说来学 python 了,之前其实我学过一点 python,但基本上忘记的差不多了,这次打算系统性的学习下,也为了以后做独立开发做准备。

本章主要介绍 python 的基础学习,包括起源发展、应用场景、安装运行、语法变量、运算符、数据类型、输入输出和文件读写等部分。

Python简介

Python 是一种直译式、面向对象的程序语言,拥有完整的函数库,轻松胜任多种工作。直译语言指的是不需要经过编译(compile)动作,将语言先转成机器码,再执行。

Python 的设计哲学强调代码的简洁性和可维护性,其核心思想是优雅明确简单。Python 支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。

主要特点包括:

  • 易于学习和使用:语法简洁明了,非常适合初学者作为入门语言。
  • 可移植性:可以在多种操作系统上运行,如 WindowsMac OS XLinux等。
  • 解释型语言:代码在运行时会被解释器逐行执行,无需编译成机器码
  • 动态类型系统:在运行时确定变量类型,提供了更大的灵活性。
  • 自动内存管理:具有自动内存管理垃圾回收功能,简化了内存管理。
  • 面向对象:支持面向对象编程,允许定义类和对象。
  • 丰富的标准库:拥有庞大的标准库,提供了许多用于处理文件、系统调用、网络通信等的模块。
  • 开源:Python 是开源的,拥有活跃的社区,不断有新的库和框架被开发出来。

起源和发展历史

Python 由荷兰程序员 Guido van Rossum(吉多·范罗苏姆)于 1989 年圣诞节期间开始开发,最初是作为 ABC 语言的一种继承。

发展历史

  • 1991年:发布了 Python 第一个公开版本 0.9.0,包含了模块、异常处理、函数以及核心数据类型等基本语言特性。
  • 1994年:发布了 Python 1.0,引入了 lambda、map、filter和reduce等特性,形成了相对完整的语言结构。
  • 2000年:发布了 Python 2.0,引入了垃圾回收机制和Unicode支持,使得 Python 逐渐成为适用于多种领域的编程语言。
  • 2008年:发布了 Python 3.0,旨在解决 Python 2 中的一些设计缺陷和不一致性,引入了不兼容的语法和库变化,提高了语言的一致性和清晰度。
  • 社区和框架的兴起:Python 社区逐渐壮大,涌现出大量优秀的第三方库和框架,如 NumPy、Django、Flask 等,为Python 在数据科学、Web开发等领域的应用提供了强大的支持。

应用场景

Python 从最初的一个简单的脚本解释器发展成为今天全球最受欢迎的编程语言之一,广泛应用于网络爬虫游戏开发图像处理数据分析人工智能机器学习Web开发自动化测试等多个领域。

安装和运行

我的电脑是 mac,系统自带了 python3,如果需要额外安装的话,可以用 homebrew。

homebrew 安装 Python:

brew install python

运行 Python 脚本:

python hello.py
# or
python3 hello.py

如果是 windows 电脑可以访问官网去下载安装,按照安装提示,确保勾选 “Add Python to PATH” 选项,这样可以在命令行中直接运行 Python。

如果是 linux 系统也自带了 python3,或者用 apt 命令安装

变量及命名规则

Python 是动态类型语言,变量在声明时不必指定类型。同时变量的命名有一些规则:

  1. 必须由英文字母、_(下划线)或中文字开头,建议使用英文字母。
  2. 变量名称只能由英文字母、数字、_(下划线)或中文字所组成,但不建议使用中文字。
  3. 英文字母大小写是敏感的,Name和name是不同变量。
  4. 不能使用系统保留字(或关键字)或内置函数名称作变量名称。
  5. 变量名应该既简洁又具有描述性,以便于理解变量的用途。

变量使用:

# 变量的使用
x = 100
y = x * 2
print('@@@ y:', y) # @@@ y: 200

基本运算符

运算符是语言中最基础的,常用的包括算术运算符、比较运算符、逻辑运算符、赋值运算符和一些其他特殊运算符。

算数运算符

Python 中的算术运算符用于执行基本的数学运算。以下是 Python 支持的算术运算符:

a = 30
b = 4
print('@@@ 加法 a+b:', a+b) # @@@ 加法 a+b: 34
print('@@@ 减法 a-b:', a-b) # @@@ 减法 a-b: 26
print('@@@ 乘法 a*b:', a*b) # @@@ 乘法 a*b: 120
print('@@@ 除法 a/b:', a/b) # @@@ 除法 a/b: 7.5
print('@@@ 整除 a//b:', a//b) # @@@ 整除 a//b: 7
print('@@@ 取余 a%b:', a%b) # @@@ 取余 a%b: 2
print('@@@ 指数运算 a**b:', a**b) # @@@ 指数运算 a**b: 810000

比较运算符

比较运算符用于比较两个值,并根据比较结果返回布尔值( True 或 False)。以下是 Python 中常用的比较运算符:

c = 6
d = 8
print('@@@ 等于 c==d:', c==d) # @@@ 等于 c==d: False
print('@@@ 不等于 c!=d:', c!=d) # @@@ 不等于 c!=d: True
print('@@@ 大于 c>d:', c>d) # @@@ 大于 c>d: False
print('@@@ 小于 c<d:', c<d) # @@@ 小于 c<d: True
print('@@@ 大于等于 c>=d:', c>=d) # @@@ 大于等于 c>=d: False
print('@@@ 小于等于 c<=d:', c<=d) # @@@ 小于等于 c<=d: True

逻辑运算符

在 Python 中,逻辑非(not)、逻辑与(and)和逻辑或(or)是三个基本的逻辑运算符,用于执行布尔逻辑操作。

e = True
f = False
print('@@@ 逻辑非 not e:', not e) # @@@ 逻辑非 not e: False
print('@@@ 逻辑与 e and f:', e and f) # @@@ 逻辑与 e and f: False
print('@@@ 逻辑或 e or f:', e or f) # @@@ 逻辑或 e or f: True

赋值运算符

赋值运算符用于给变量赋值或修改变量的值。以下是 Python 中常用的赋值运算符:

g = 10
g += 3
print('@@@ g += :', g) # @@@ g += : 13
g -= 3
print('@@@ g -= :', g) # @@@ g -= : 10
g *= 3
print('@@@ g *= :', g) # @@@ g *= : 30
g /= 3
print('@@@ g /= :', g) # @@@ g /= : 10.0
g %= 4
print('@@@ g %= :', g) # @@@ g %= : 2.0
g **= 3
print('@@@ g **= :', g) # @@@ g **= : 8.0
g //= 5
print('@@@ g //= :', g) # @@@ g //= : 1.0

成员运算符

成员运算符用于检查某个值是否存在于某个序列(如列表、元组、字符串)或某个集合(如集合或字典)中。

in 运算符用于检查左侧的值是否是右侧序列或集合的成员。如果值存在于序列或集合中,返回 True;否则,返回 False。

not in 和上面逻辑相反。

# 检查元素是否在列表中
my_list = [1, 2, 3, 4, 5]
print(3 in my_list)  # 输出 True

# 检查元素是否在元组中
my_tuple = (1, 2, 3)
print(2 in my_tuple)  # 输出 True

# 检查字符是否在字符串中
my_string = "hello"
print('e' in my_string)  # 输出 True

# 检查键是否在字典中
my_dict = {'a': 1, 'b': 2}
print('a' in my_dict)  # 输出 True

# 检查元素是否在集合中
my_set = {1, 2, 3}
print(2 in my_set)  # 输出 True

身份运算符

身份运算符用于比较两个对象的内存身份,即它们是否为同一个对象。

is 运算符用于检查两个变量是否引用同一个对象。如果两个变量引用的是同一个对象,则返回 True;否则,返回 False。

is not 运算符用于检查两个变量是否不引用同一个对象。

arr1 = [1, 2, 3]
arr2 = [1, 2, 3]

# 比较两个列表的内容是否相等
print(arr1 == arr2)  # 输出 True,因为它们包含相同的元素

# 比较两个列表是否是同一个对象
print(arr1 is arr2)  # 输出 False,因为 arr1 和 arr2 是两个不同的列表对象

arr3 = arr1
print(arr1 is arr3)  # 输出 True,因为 arr3 和 arr1 引用同一个列表对象

Python 中的运算符优先级如下(从高到低):

  • 指数运算符:**
  • 负号:-(注意:正号+没有优先级,因为它没有实际效果)
  • 乘法、除法、模运算符:* / %
  • 加法、减法运算符:+ -
  • 比较运算符:> < >= <= != ==
  • 身份运算符:is、is not(用于比较两个对象的id)
  • 成员运算符:in、not in(用于检查成员资格)
  • 逻辑非运算符:not
  • 逻辑与运算符:and
  • 逻辑或运算符:or

基本数据类型

Python 的基本数据类型有下列几种:数值数据类型(整数 int 和 浮点型 float)、布尔值(Boolean)、字符串(string)数据类型。对于如何判断类型,Python 内置了 type() 函数。

x = 10
y = x / 3
print('@@@ x 的类型:', type(x)) # @@@ x 的类型: <class 'int'>
print('@@@ y 的类型:', type(y)) # @@@ y 的类型: <class 'float'>

数值数据类型

  • 整数:整数是没有小数部分的数,可以是正数、负数或零。
  • 浮点数:浮点数是有小数点的数,可以表示更广泛的数值范围,但可能会有精度限制。
a = 20
b = a + 1.2
print('@@@ 整数 a:', a) # @@@ 整数 a: 20
print('@@@ 浮点数 b:', b) # @@@ 浮点数 b: 21.2

2、8、16 进制换算

# 十进制转二进制
print(bin(10))  # 输出: 0b1010
# 十进制转八进制
print(oct(10))  # 输出: 0o12
# 十进制转十六进制
print(hex(10))  # 输出: 0xa

强制类型转换

  • int(): 强制转换为整数。
  • float(): 强制转换为浮点数。
print('@@@ 10.5 转换为整型:', int(10.5))  # @@@ 10.5 转换为整型: 10
print('@@@ 20 转换为浮点型:', float(20))  # @@@ 20 转换为浮点型: 20.0

数值运算常用的函数

  • abs(x): 绝对值函数。
  • pow(x,y): 幂运算函数。
  • round(x): 五舍六入函数。(注意:不是四舍五入
print('@@@ 绝对值函数:', abs(-3.14))  # @@@ 绝对值函数: 3.14
print('@@@ 幂运算函数:', pow(2,3))  # @@@ 幂运算函数: 8
print('@@@ 五舍六入函数:', round(4.5))  # @@@ 五舍六入函数: 4

布尔值数据类型

布尔值数据类型有俩种,True(真值)和 False (假值),数据类型是 bool。如果将 True 转换为整数得到 1,将 False 转换为整数得到 0。

y = True
n = False
print('@@@ True转换为整型:', int(y)) # @@@ True转换为整型: 1
print('@@@ True的类型:', type(y)) # @@@ True的类型: <class 'bool'>
print('@@@ False转换为整型:', int(n)) # @@@ False转换为整型: 0
print('@@@ False的类型:', type(n)) # @@@ False的类型: <class 'bool'>

字符串数据类型

字符串数据类型(str)是一种用于存储文本的序列类型。字符串可以包含字母数字符号空格,它们被单引号(')、双引号(")或三引号(''' 或 """)包围。

字符串操作方法:

  • 索引和切片: 使用 [x,y] 字符串可以被索引和切片,索引从0开始,负索引表示从字符串的末尾开始计数。
  • 连接: 使用 + 操作符连接字符串。
  • 重复: 使用 * 操作符重复字符串。
  • 长度: 使用 len() 函数获取字符串长度。
  • 大小写转换: 使用 .upper() 转换为大写,使用 .lower() 转换为小写。
  • 查找: 使用 .find(sub) 查找子串 sub,如果找到返回索引,否则返回-1。
  • 替换: 使用 .replace(old, new) 替换子串 old 为 new。
  • 去除空白: 使用 .strip() 去除字符串两端的空白字符,.rstrip()去除字符串右端的空白字符, .lstrip()去除字符串左端的空白字符。
  • 分割和合并: 使用 .split(sep=None) 按照分隔符sep分割字符串,返回一个列表。.join(iterable) 将序列中的元素以指定的字符连接成新的字符串。
  • 格式化: 使用 % 操作符或 str.format() 方法进行字符串格式化。
  • 编码和解码: 使用 .encode() 将字符串编码为指定的格式。.decode() 将编码的字符串解码为普通字符串。
s = "Hello, World!" # 创建字符串
print('@@@ 索引:', s[0])  # @@@ 索引: H
print('@@@ 切片:', s[0:5])  # @@@ 切片: Hello
print('@@@ 连接:', 'niu' + 'nai')  # @@@ 连接: niunai
print('@@@ 重复:', 'niu' * 3)  # @@@ 重复: niuniuniu
print('@@@ 长度:', len(s))  # @@@ 长度: 13
print('@@@ 转换为大写:', s.upper())  # @@@ 转换为大写: HELLO, WORLD!
print('@@@ 转换为小写:', s.lower())  # @@@ 转换为大写: hello, world!
print('@@@ 查找子串:', s.find("World"))  # @@@ 查找子串: 7
print('@@@ 去除空白:', s.strip())  # @@@ 去除空白: Hello, World!
words = s.split(", ")
print('@@@ 分割:', words)  # @@@ 分割: ["Hello", "World!"]
print('@@@ 合并:', "-".join(words))  # @@@ 合并: Hello-World!
print("@@@ 使用百分号格式化: Name: %s, Age: %d" % ("niunai", 30))  # @@@ 使用百分号格式化: Name: niunai, Age: 30
print("@@@ 使用 format 格式化 Name: {name}, Age: {age}".format(name="niunai", age=30)) # @@@ 使用 format 格式化: Name: niunai, Age: 30
print('@@@ 编码:', s.encode())  # @@@ 编码: b'Hello, World!'
print('@@@ 解码:', b"Hello, World!".decode())  # @@@ 解码: Hello, World!

注释

  • 单行注释: 单行注释使用井号( # )开始。#后面的所有内容都会被Python解释器忽略,直到该行结束。
  • 多行注释: Python 没有专门的语法来创建多行注释,但可以使用多行字符串(使用三引号 """''' )来实现类似的功能。虽然这些多行字符串实际上是字符串类型,但它们经常被用作多行注释。

输入和输出

输出print()

print() 函数用于将信息输出到控制台。你可以使用它来打印文本、变量值、表达式结果等。

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  • objects:可以是一个或多个对象,它们将被转换为字符串然后打印。
  • sep:对象之间的分隔符,默认为空格。
  • end:打印结束后的字符串,默认为换行符 \n。
  • file:指定输出的目标文件,默认为 sys.stdout(标准输出)。
  • flush:是否强制刷新输出缓冲区,默认为 False。

输入input()

input() 函数用于从控制台读取用户输入。它会暂停程序执行,直到用户输入一些内容并按下回车键。

input(prompt="", /)
  • prompt:提示信息,它会在用户输入之前显示在控制台上。
name = input("请输入你的名字: ")
print("Hello,", name)

文件读写

在 Python 中,open() 函数是用来打开一个文件,并返回一个文件对象。通过这个文件对象,你可以读取或写入文件。

基本语法

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, close=True)
  • file:文件路径。
  • mode:文件打开模式,常用的有:
    • 'r':只读模式(默认)。
    • 'w':写入模式,如果文件存在会被覆盖,如果文件不存在会被创建。
    • 'a':追加模式,写入内容会被追加到文件末尾,如果文件不存在会被创建。
    • 'b':二进制模式。
    • 't':文本模式(默认)。
    • '+':更新模式,可以读写文件。
  • buffering:设置缓冲,0 表示无缓冲,1 表示行缓冲,大于1表示缓冲大小。
  • encoding:设置文件编码,默认为None
  • errors:设置编码错误处理方案,默认为None
  • newline:设置换行符,默认为None
  • closefd:是否关闭文件描述符,默认为True
  • close:是否在文件操作完成后关闭文件,默认为True

写入文件

# 打开文件并写入内容
with open('example.txt', 'w') as file:
    file.write("Hello, World!")

追加内容到文件

# 打开文件并追加内容
with open('example.txt', 'a') as file:
    file.write("\nThis is a new line.")

读取文件

# 打开文件并读取内容
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

使用with语句可以确保文件在使用后正确关闭,即使在读取文件时发生异常也是如此。

读取二进制文件

# 打开二进制文件并读取内容
with open('example.bin', 'rb') as file:
    binary_content = file.read()
    print(binary_content)

写入二进制文件

# 打开二进制文件并写入内容
with open('example.bin', 'wb') as file:
    file.write(b"Hello, World!")

python学习专栏系列

练习代码库地址

python-study