python知识总结--基础语法

Updated on with 0 views and 0 comments

一、 Hello World

jupyter中新建一个notebook

print('hello world!')

运行结果如下

image.png

二、Python基础语法

2.1 缩进划分代码块

Python使用缩进划分代码块而不是{}

2.2 PEP8规范

PEP8规范是Python代码在书写时遵守的规范,并不是语法规则

2.3 关键字

已经定义好的具有一些特殊功能的关键字,查看关键字命令 help("keywords")

输出结果如下

image.png

2.4 标识符

标识符由数字、字母和下划线组成,且不能用数字作为开头,不能和关键字重名

2.5 注释

  • 单行注释使用#
  • 多行注释使用'''注释内容'''或者"""注释内容"""
# 文件名:test.py

'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''
"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""

2.6 分割语句

一行中使用多个语句;分割

print("hello");print("world");

2.7 多行语句

一个语句分成多行可以用/分割

total = 0
a = 1
b = 2
c = 1
total = a + \
        b + \
        c
print(total)

2.8 变量

变量是对数据存储地址的引用,给变量赋值并不是将数据赋予变量,而是将数据所在的存储地址赋给变量

使用id()可以查看对象的内存地址

image.png

2.8.1 作用域

作用域就是程序运行时变量可被访问的范围

2.8.2 全局变量

定义在函数和对象外部,作用范围是整个模块

2.8.3 局部变量

定义在函数内的变量,作用范围只能是在函数内

2.9 导包

使用import 和 from ... import ...进行包和模块的导入

2.10 Python内置函数

函数功能
print输出
input输入
range(start,stop,[step])生成可迭代序列(起始位置,中止位置,步长)
start省略默认值为0,stop不能省略且要大于0,step省略默认值为1
type返回对象的类型
del在内存中删除对象
dir查看对象的内置方法和属性
help显示对象的帮助信息
id查看对象内存地址

代码示例如下

#print函数
print("print()函数")

# input函数
a = input("input:")
print(a)

#range函数
temp = range(0,5,1)
print(list(temp))

#type函数
print(type(temp))

#dir函数
import math
print("模块 math 的属性和方法:", dir(math))

# help函数
print(help(math))

# id函数
print(id(temp))

#del函数
del(temp)

三、流程控制语句

3.1 判断语句

3.1.1 if语句

if语句语法如下

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3

condition可以是一个结果为True或者False的表达式,也可以是数字,如果是数字则有非0为真的逻辑

a = int(input("输入a="))
if a==1:
    print("输入1")
elif a == 2:
    print("输入2")
else:
    print("输入其他值")

3.1.2 match...case

语法如下:

match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:
        <action_wildcard>

match 后的对象会依次与 case 后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,_ 可以匹配一切

http_status = int(input("输入http状态码="))
match http_status:
    case 400:
        print('参数异常')  
    case 404:
        print('资源不存在')
    case 500:
        print('服务错误')
    case _:
        print("其他错误")

3.2 循环语句

3.2.1 for循环

for 循环可以遍历任何可迭代对象,else用于在循环结束后执行一段代码可以省略不写

for语句语法

for <variable> in <sequence>:
    <statements>
else:
    <statements>

遍历一个列表如下:

list = [1,2,3,4,5]
for item in list:
    print(item)
else:
    print("循环结束")

3.2.2 while循环

Python没有do...while循环

while <expr>:
    <statement(s)>
else:
    <additional_statement(s)>

使用while来移除一个列表中的数据

list = [1,2,3,4,5,6,7,8,9,10]
while len(list) > 0:
    print(list.pop())
else:
    print("循环结束")

3.2.3 循环终止

使用break和continue实现循环终止

  • break结束整个循环
  • continue结束本轮循环

break结束循环

list = [1,2,3,4,5,6,7,8,9,10]
while len(list) > 0:
    print(list.pop())
    if len(list) == 5:
        break
else:
    print("循环结束")

continue跳过本轮循环

list = [1,2,3,4,5]
for item in list:
    if item == 5:
        continue
    else:
        print(item)

四、函数

函数的优点:

  • 代码复用
  • 只负责特定功能
  • 可读性
  • 易于维护
  • 功能模块化

4.1 声明一个函数

函数声明语法如下,在函数体中可以使用return返回一个值

def 函数名(参数列表):
    函数体

函数示例如下,定于一个求和函数

def sumFunc(a,b):
    return a+b

4.2 函数参数

函数的参数有以下几种情况

4.2.1 必备参数

必备参数必须以正确的顺序传如函数,调用时的数量必须和声明是的一样

def sumFunc(a,b):
    return a+b

4.2.2 关键字参数

参数调用时使用等号调用的形式传入参数,使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值

def sumFunc(a,b):
    print(a)
    print(b)
    return a+b

print(sumFunc(b=1,a=2))

4.2.3 默认参数

调用函数时,缺省参数的值如果没有传入则使用默认值

def sumFunc(a=0,b=0):
    print(a)
    print(b)
    return a+b

print(sumFunc())

4.2.4 不定长参数

可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,声明时不会命名,加了星号 的参数会以元组(tuple)的形式导入,加了两个星号的参数会以字典的形式导入。

参数以元组形式传入如下:

def sumFunc(a,*tuple):
    print(a)
    print(tuple)

sumFunc(1,2,3,4)

参数以字典形式传入如下:

def countAge(age,**dict):
    print(age)
    print(dict)

countAge(1,a=2,b=3)

4.1.5 参数顺序

参数顺序排列为:

必备参数、关键字参数、默认参数、不定长参数

4.2 返回值

4.2.1 无返回值

函数体中没有return,函数返回None值

4.2.2 有返回值

函数体有return,并返回了一个值

4.2.3 多个返回值

函数体有return,且返回多个值,这些值会封装成一个元组返回

4.3 函数内的参数变化情况

传递的参数有两种类型

  • 不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象。
  • 可变类型:类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响

不可变类型实例:

def unChange(a):
    print(id(a))
    a = 10
    print(id(a))

arg = 1
unChange(arg)
print(arg)

可变类型实例:

def unChange(a):
    print(id(a))
    a = 10
    print(id(a))

arg = 1
unChange(arg)
print(arg)

4.4 匿名函数

python使用lambda关键字创建匿名函数

  • lambda 只是一个表达式,函数体比 def 简单很多
  • lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
  • 虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,内联函数的目的是调用小函数时不占用栈内存从而减少函数调用的开销,提高代码的执行速度

4.4.1 创建一个匿名函数

sum = lambda a,b:a+b
print(sum(1,2))

4.4.2 函数封装匿名函数

将匿名函数封装在一个函数内,这样可以使用同样的代码来创建多个匿名函数

def myFunc(n):
    return lambda a:a*n

func1 = myFunc(2)
func2 = myFunc(3)

print(func1(11))
print(func2(11))

五、面向对象

面向对象三大特性

  • 封装:封装是一个概念,他把方法属性集中到一个类中对使用者隐蔽其中的细节
  • 继承:继承是一种床架类的方法,在现有类的基础上扩展生成新的类称为子类,被继承的类称为父类、基类、超类
  • 多态:同样的函数对于不同的对象有不同的实现

面向对象的优势:

  • 提高代码复用
  • 编码更灵活,提升代码可维护性
  • 提高代码扩展性
  • 提高开发效率

5.1 声明一个类

Python使用class关键字声明一个类

class Animal:
    name = "动物"
    def sayName(self):
        print("名称=%s" % self.name)

a = Animal()
print(a.name)
a.sayName()

5.2 构造函数

Python默认构造函数是 __init__()

class Animal:
    name = ""
    def __init__(self,nameArg):
        self.name = nameArg
    def sayName(self):
        print("名称=%s" % self.name)

a = Animal("动物")
print(a.name)
a.sayName()

5.3 self

self代表类的实例而不是类本身

class Test:
    def prt(self):
        print(self)
        print(self.__class__)
 
t = Test()
t.prt()

5.4 继承

Python在类名后加(父类名)实现一个继承

class Animal:
    name = ""
    __age = 0 # 私有属性
    def __init__(self,nameArg,ageArg):
        self.name = nameArg
        self.age = ageArg
    def sayName(self):
        print("名称=%s,年龄%d" % (self.name,self.age))

# 子类
class Cat(Animal):
    color = ""
    def __init__(self,colorArg,nameArg,ageArg):
        Animal.__init__(self,nameArg,ageArg)
        self.color = colorArg
    def sayName(self):
        print("名称=%s,年龄%d,颜色%s" % (self.name,self.age,self.color))


c = Cat('red',"猫猫",18)
c.sayName()
  

5.5 多继承

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

语法如下:

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>
#!/usr/bin/python3
 
#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
 
#单继承示例
class student(people):
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
 
#另一个类,多继承之前的准备
class speaker():
    topic = ''
    name = ''
    def __init__(self,n,t):
        self.name = n
        self.topic = t
    def speak(self):
        print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))
 
#多继承
class sample(speaker,student):
    a =''
    def __init__(self,n,a,w,g,t):
        student.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)
 
test = sample("Tim",25,80,4,"Python")
test.speak()   #方法名同,默认调用的是在括号中参数位置排前父类的方法

5.6 方法重写

可以在子类重写你父类的方法

class Animal:
    def sayName(self):
        print("Animal的sayName方法" )
class Cat(Animal):
    def sayName(self):
        print("Cat的sayName方法" )
c = Cat()
c.sayName()
#调用被覆盖的父类方法
super(Cat,c).sayName()
        

5.7 私有化

python可以将属性和方法私有化

  • 双下划线表示完全私有化
  • 单下划线表示模块私有化

Python使用双下划线修饰属性或方法表示设个属性或方法为私有,不能再类的外部使用或直接访问,在内部使用self关键字访问

5.8 类的专有方法

  • init : 构造函数,在生成对象时调用
  • del : 析构函数,释放对象时使用
  • repr : 打印,转换
  • setitem : 按照索引赋值
  • getitem: 按照索引获取值
  • len: 获得长度
  • cmp: 比较运算
  • call: 函数调用
  • add: 加运算
  • sub: 减运算
  • mul: 乘运算
  • truediv: 除运算
  • mod: 求余运算
  • pow: 乘方

可以利用专有方法实现运算符重载,实例如下

#!/usr/bin/python3
 
class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b
 
   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)
 
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)

六、Python第三方库和标准库

Python标准库主要有以下三个

  • time 时间处理,提供有关时间的操作
  • sys 系统交互,用于控制python的运行时环境
  • os 操作系统,提供了访问操作系统底层的接口

Python第三方库主要有以下三个:

  • pandas 数据分析,用于数据挖掘和数据分析,同时也提供数据清洗功能
  • numpy 数据计算,支持多维数组和矩阵运算,同时提供了大量数组运算所需的函数库
  • matplotlib 图形绘制,主要用于绘制2D图形

七、IO操作

7.1 打开文件

Python打开文件的函数为 f = open(filePath,mode,encoding)

  • filePath为文件路径
  • encoding为文件打开编码
  • mode为文件打开模式,默认为t

文件打开模式有以下几种:

模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
U通用换行模式(不推荐)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

7.2 文件读写

7.2.1 读文件

函数作用
read([size])从文件读取指定的字节数,如果未给定或为负则读取所有
readline([size])读取整行,包括 "\n" 字符。
readlines([sizeint])读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。

7.2.2 写文件

函数作用
write(str)将字符串写入文件
writelines(sequence)将序列字符串列表写入文件

7.3 文件关闭

函数作用
close()关闭文件。关闭后文件不能再进行读写操作。
flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入

标题:python知识总结--基础语法
作者:wenyl
地址:http://www.wenyoulong.com/articles/2024/04/17/1713344442718.html