Python学习笔记——Python基础知识

基础语法

#单分支结构
if score>=60 and score<=100:
    print('及格')
    
#双分支结构
if score>=60 and score<=100:
    print('及格')
else:
	print('不及格')
    
#多分支结构
if score>=60 and score<=80:
	print('良好')
elif score>=80 and score<=100:
    print('优秀')
else:
    print('不及格')
    
#条件表达式		(情况1)	if 表达式 else	 (情况2)	为Ture执行情况1,False执行情况2
print( ('a大于b')	if a>b else	('a不大于b') )

#pass:是一个占位符,只用来临时占位
if(res>100):
    pass
else:
    pass

循环体

while循环

语法结构:while 条件(为True):

​ 循环体

for-in循环

语法结构:for 自定义的变量 in 可迭代对象:

​ 循环体

#循环遍历字符串
for item in 'Python':
    print(item)
#循环遍历整数序列
for i in range(10):
    print(i)
#如果不需要自定义变量,可以写为将其写为_
for _ in range(5):
    print('循环五次')

转义符

#\n			换行符
print('hello\nworld')	

#\t			制表符,占四个字符
print('hello\tworld')	#>hello    world

#\r			回车符
print('hello\rworld')	#>world

#\b			退格符,退回上一个字符
print('hello\bworld')	#>hellworld

#使转义符失效(最后一个字符不能是单个反斜杠)
print(r'hello\nworld')	#>hello\nworld
print(r'hello\nworld\')	#报错

运算符

常用运算符

#加减乘除:+、-、*、/

特殊运算符

整除://(一正一负向下取整) 11//2 >>> 5 9//-4 >>> -3

取余:%(一正一负:结果=被除数-除数*商) 11%2 >>> 1

幂运算:** 2**3 >>> 8

赋值运算符
#解包赋值:交换a和b的值
a,b,c = 20,30,40
a,b = b,a		#a=30,b=20
比较运算符
a = 10
b = 10
list1 = [11,22,33,44]
list2 = [11,22,33,44]
#==:比较对象的值
print(a==b)		#True
#is/is not:比较对象的地址
print(a is b)	#Ture
print(list1 is list2)		#False
print(list1 is not list2)	#True
布尔运算符
#and:与
#or:或
#not:非
#in:被包含于
str = 'Hello'
print('H' in str)		#True
print('A' in str)		#False
#not in:不被包含于
print('A' not in str)	#True

注释

单行注释
# 以#开头,直到换行结束
# 单行注释
多行注释
#以一对三引号作为开始和结束

''' 这里是
多行
注释'''
中文编码声明注释
#在.py文件开头加入,用以指定文件的编码格式
#coding:gbk		指定为GBK编码

列表

特点:

创建
#创建列表对象
#方式一:直接赋值
list1 = ['hello','world',123]
#方式二:使用list()函数
list2 = list(['hello','world',123])
#创建空列表
list3 = []
list4 = list()
查询
list = ['hello','world',123,'hello',888,'wang',666,333]

#获取列表中的单个元素
a = list[1]
print(a)				# world

#获取列表中的多个元素
list2 = list[1:6:1]			# [起始位置:结束位置(不包含):步长] 默认步长为1
print(list2)				# ['world',123,'hello',888,'wang']
#步长为负数时逆序输出
list3 = list[::-1]
print(list3)				# [333,666,'wang',888,'hello',123,'world','hello']

#获取列表中的元素索引:使用index()函数
print(list.index('hello'))				# 0,如果有相同元素只返回第一个的索引
print(list.index('Python'))				# ValueError:'Python' is not in list
#在指定范围内查找元素
print(list.index('hello'),1,4)			# 3

'''判断指定元素在列表中是否存在
元素 in/not in 列表名'''
print('hello' in list)		#True
print(222 not in list)		#True			
增加
list1 = [10,20,30]
list2 = [50,60]

# append():在列表的末尾添加一个元素
list1.append(40)
print(list1)			#[10,20,30,40]
#list1.append(list2)	 
#print(list1)			 [10,20,30,40,[50,60]] 将list2视为一个元素

# extend():在列表的末尾添加至少一个元素
list1.extend(list2)		
print(list1)			#[10,20,30,40,50,60] 将list2中的元素拆开来

# insert(index,i):在列表的任意位置添加一个元素
list1.insert(1,999)
print(list1)			#[10,999,20,30,40,50,60]

# 切片:在列表的任意位置添加至少一个元素
list3 = [True,False,'hello']
list1[1:] = list3		#将list[1]后面的元素用list3替换
print(list1)			#[10,True,False,'hellow']
删除
# remove(i):删除指定元素,如果有重复元素只删除第一个
# pop(index):删除指定索引位置上的元素,如果不指定索引则删除最后一个元素
# 切片:一次至少删除一个元素
list1[1,3] = []			#实际上是使用空列表替换其中某些元素
# clear():清空列表
# del:删除列表
del list1
修改
list1 = [10,20,30,40]

#一次修改一个值
list1[2] = 300
print(list1)			#[10,20,300,40]

#一次修改多个值
list1[1:3] = [200,300,400,500]
print(list1)			#[10,200,300,400,500,40]
遍历
#列表元素的遍历
for item in list:
    print(item)	
排序
list1 = [10,30,20,60,50]
#升序排序:sort()
list1.sort()
#list1.sort(reverse = False)
print(list1)			#[10,20,30,50,60]
#降序排序
list1.sort(reverse = True)
print(list1)			#[60,50,30,20,10]

#使用内置函数sorted()对列表进行排序,将产生一个新的列表对象
new_list1 = sorted(list1,reverse = False)	#升序
new_list2 = sorted(list1,reverse = True)	#降序
列表生成式
#语法格式:[表示列表元素的表达式 for 自定义变量 in 可迭代对象]	表达式中通常包含自定义变量
list = [i*i for i in range(1,6)]
print(list)			#[1,4,9,16,25]

字典

相当于 HashMap

  • Python 内置的数据结构之一,与列表一样是一个可变序列
  • 键值对的方式存储数据,是一个无序的序列
创建
#方式一:使用{}
dictionary = {'k1':1,'k2':2}
#方式二:使用内置函数dict()
dictionary2 = dict(name='tom',age=20)
#创建空字典
dic = {}
dic2 = dict()
查询
score = {'zs':100,'ls':80}
#查找的键不存在时,方式一会报错,方式二不报错(返回None)
#方式一:使用[]
print(score['zs'])			#100
#方式二:使用get()方法
print(score.get('zs'))		#100
增加
#增加键值对
score['ww'] = 90
删除
#删除指定键值对
del score['zs']
#清空字典
score.clear()
修改
#修改元素
score['ww'] = 100
遍历
for item in score:
    print(item,score[item])
其他
#获取所有的key,类型为列表
keys = score.keys()
#获取所有的value,类型为列表
values = score.values()
#获取所有键值对,类型为列表,列表中存储元组
kv = score.items()
字典生成式
items = ['fruits','books','others']
prices = ['苹果','《三体》',100]
#使用内置zip()函数
dictionary = {item:price for item,price in zip(items,prices)}

元组

  • python 内置的数据结构之一,是一个不可变序列
创建
#方式一:使用()创建,()可以省略
t1 = ('python','world',99)
t11 = 'python','world',99
#方式二:使用内置函数tuple()
t2 = tuple(('python','world',99))
#创建只有一个元素的元组必须使用逗号和小括号
t3 = ('python',)
#创建空元组
t4 = ()
t5 = tuple()
遍历
t = ('python','world',98)
for item in t:
    print(t[item])

集合

  • 与列表、字典一样都属于可变序列
  • 是没有 value 的字典,集合中的元素无序存储,不能重复
创建
#方式一:使用{}创建
s1 = {1,2,3,4,5,5,6,7,7}
print(s1)				#{1,2,3,4,5,6,7}
#方式二:使用内置函数set()
s2 = set(range(5))
增加
s = {1,2,3,4,5}
#添加一个元素
s.add(10)
#添加多个元素
s.update({7,8,9})
删除
s.remove(10)
s.remove(100)			#抛异常
s.discard(5)
s.discard(100)			#不抛异常
s.pop()					#随机删除一个元素
s.clear()				#清空集合
集合间的关系
#一个集合是否是另一个集合的子集
print(s1.issubset(s2))
#一个集合是否是另一个集合的超集
print(s1.issuperset(s2))
#两个集合是否没有交集
print(s1.isdisjoint(s2))
数学操作
s1 = {10,20,30,40}
s2 = {30,40,50,60}
#交集
print(s1.intersection(s2))			#{30,40}
print(s1 & s2)
#并集
print(s1.union(s2))					#{10,20,30,40,50,60}
print(s1 | s2)
#差集(s1 - s2)
print(s1.difference(s2))			#{10,20}
print(s1 - s2)
#对称差集
print(s1.symmetric_difference(s2))	#{10,20,50,60}
print(s1 ^ s2)
集合生成式
s = {i*i for i in range(6)}

数据结构总结

数据结构是否可变是否重复是否有序定义符号
列表(list)可变可重复有序[]
元组(tuple)不可变可重复有序()
字典(dict)可变key不可重复,value可重复无序{key:value}
集合(set)可变可重复无序{}

可变类型:value(值)改变,id(内存地址)不会改变

不可变类型:value(值)改变,id(内存地址)也会改变(创建了新的内存空间)

字符串

查询
#index(substr):查找子串第一次出现的位置,如果不存在就抛出异常
#rindex(substr):查找子串最后一次出现的位置,如果不存在就抛出异常
#find(substr):查找子串第一次出现的位置,如果不存在就返回-1
#rfind(substr):查找子串最后一次出现的位置,如果不存在就返回-1
#建议使用find方法
大小写转换
#upper():把字符串中所有字符都转成大写字母
#lower():把字符串中所有字符都转成小写字母
#swapcase():把字符串中所有大写字母转成小写字母,所有小写字母转成大写字母
#capitalize():把第一个字符转换为大写,其余字符转换为小写
#title():把每个单词的第一个字符转换为大写,每个单词剩余的字符转换成小写
#转换之后会产生一个新的字符串对象
内容对齐
#center(width,str):居中对齐,第一个参数指定宽度,第二个参数指定填充符,默认为空格,如果设置宽度小于实际宽度则返回原字符串
#ljust(width,str):左对齐,第一个参数指定宽度,第二个参数指定填充符,默认为空格,如果设置宽度小于实际宽度则返回原字符串
#rjust(width,str):右对齐,第一个参数指定宽度,第二个参数指定填充符,默认为空格,如果设置宽度小于实际宽度则返回原字符串
#zfill(width):右对齐,左边用0填充,只接收一个参数用于指定字符串的宽度,如果指定的宽度小于实际宽度则返回原字符串
字符串拆分
#split(str,maxsplit):从字符串左边开始拆分,可以用str指定拆分符,默认拆分字符是空格,返回值是一个列表;可以通过maxsplit指定拆分字符串的最大次数,在达到最大拆分次数后剩余的字符会作为单独的一部分
#rsplit(str,maxsplit):从字符串右边开始拆分,可以用str指定拆分符,默认拆分字符是空格,返回值是一个列表;可以通过maxsplit指定拆分字符串的最大次数,在达到最大拆分次数后剩余的字符会作为单独的一部分
判断字符串
#isidentifier():判断指定字符串是不是合法的标识符
#isspace():判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符)
#isalpha():判断指定的字符串是否全部由字母组成(中文也算)
#isdecimal():判断指定的字符串是否全部由十进制的数字组成
#isnumeric():判断指定的字符串是否全部由数字组成(中文数字、罗马数字也为True)
#isalnum():判断指定的字符串是否全部由字母和数字组成
字符串比较
#比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串的字符不相等或达到最大长度
#比较原理:两个以上字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord()可以得到指定字符的原始值;与内置函数ord()对应的是内置函数chr(),调用chr(value)时指定ordinal value可以得到其对应的字符
字符串切片
#[start:end:step]:从下标start开始,截取到end(不包括end),步长为step
字符串替换/合并
#replace(str,newStr,maxReplace):第一个参数指定被替换的子串,第二个参数指定替换子串的字符串,第三个参数指定最大替换次数;该方法返回替换后得到的字符串,替换前的字符串不发生变化
#join(str):使用 str 将列表或元组中的字符串连接成一个新的字符串
⭐格式化字符串
#方式一:%做占位符
'''
%s:字符串
%i 或 %d:整数
%f:浮点数
'''
name = '张三'
age = '18'
money = '200.5'
print('我的名字叫%s,今年%d岁,有%f块钱' (name,age,money))		#我的名字叫张三,今年18岁,有200.5块钱

#方式二:{index}做占位符,index作为索引
print('我叫{0},今年{1}岁,我真的叫{0}'.format(name,age))		 #我叫张三,今年18岁,我真的叫张三

#方式三:f-string
print(f'我叫{name},今年{age}岁')			#我叫张三,今年18岁

#指定宽度和精度
print('%10d' %99)					#        99
print('%10.3f' %3.1415926)			#     3.142
print('{0:.3}'.format(3.1415926))	#3.14
print('{0:.3f}'.format(3.1415926))	#3.142
字符串的编码转换
s = '三国演义'
byte = s.encode(encoding = 'GBK')		#编码
s2 = byte.decode(encoding = 'GBK')		#解码

异常

常见异常类型
'''
ZeroDivisionError:除(或取模)0
IndexError:序列中没有此索引
KeyError:映射中没有这个键
NameError:未声明/初始化对象
SyntaxError:Python语法错误
ValueError:传入无效参数
'''
⭐异常处理机制
# try - except
try:
    代码块
except 异常类型:
    print('出错了')
    
# try - except - else:如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
try:
    n1 = int(input('请输入一个整数'))
    n2 = int(input('请输入另一个整数'))
    result = n1 / n2
except BaseException as e:
    print('出错了')
    print(e)
else:
    print('结果为:',result)
    
# try - except - else - finally:finally块无论是否发生异常都会被执行,一般用来释放资源
try:
    a = int(input('请输入一个整数'))
    b = int(input('请输入另一个整数'))
    result = a / b
except BaseException as e:
    print('出错了')
    print(e)
else:
    print('结果为:',result)
finally:
    print('谢谢您的使用')
打印异常信息
#使用traceback模块
import traceback
try:
    print('------------------')
    print(1/0)
except:
    traceback.print_exc()

函数

定义函数
def 函数名 (输入参数):
    函数体
    return xxx

def add(a,b):			#a,b为形参
    c = a + b
    return c

result = add(1,2)		#1,2为实参
print(result)			#3

#个数可变的位置形参
'''定义参数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置形参(只能定义一个)
使用*定义个数可变的位置形参
结果为一个元组
'''
def fun1(*args):
    print(args)

fun1(10)				#(10,)
fun1(10,20,30)			#(10,20,30)

#个数可变的关键字形参
'''定义函数时,可能无法事先确定传递的关键字实参的个数时,使用可变的关键字形参(只能定义一个)
使用**定义个数可变的关键字形参
结果为一个字典
'''
def fun2(**args):
    print(args)

fun2(a=10)				#{'a':10}
fun2(a=10,b=20,c=30)	#{'a':10,'b':20,'c':30}

#在一个函数的定义中,既有个数可变的位置形参,也有个数可变的关键字形参时,要求位置形参在关键字形参之前

#函数内部声明的局部变量使用global关键字声明,就变成了全局变量
def fun3():
    global age
    age = 20

fun3()
print(age)		#20
常用内置函数
print()
print(100)				#输出数字
print(3+1)				#输出表达式
print('HelloWorld')		#输出字符串
print('hello','world')	#在同一行输出字符串
open()
#将数据输出到文件中
fp = open('D:/text.txt','a+')	#a+表示如果文件不存在就创建,存在就在文件内容的后面追加
print('HelloWorld',file = fp)	#将HelloWorld输出到D盘下的text.txt文件中
id()
#查看对象的内存地址
name = 'Alvis'
print('内存地址',id(name))	#内存地址 263393783782
type()
#查看对象的类型
name = 'Alvis'
print('类型',type(name))	#类型 <class 'str'>
str()
#将其他数据类型转成字符串
print(str(123))	#'123'
int()
#将其他数据类型转成整数,文字类和小数类字符串无法转换成整数
int('123')		#123
int(9.8)		#9
int('9.8')		#ValueError
float()
#将其他数据类型转成浮点数,文字类无法转换
float('9.9')	#9.9
float(9)		#9.0
input()
#输入函数,接收来自用户的输入,返回值为str类型(可以在输入时进行类型转换,输出时使用表达式)
res = input('结果是多少?')	 #控制台显示 结果是多少? 然后输入100
print(res)					#100
range()
#用于生成一个整数序列
#方式1:range(i)		i:数字个数
r = range(10)		#默认从0开始,步长为1
print(r)			#range(0,10)
print(list(r))		#[0,1,2,3,4,5,6,7,8,9]

#方式2:range(i,j)		i:起始值,j:到第j个数结束(不包含j)
r = range(1,10)		#默认步长为1
print(list(r))		#[1,2,3,4,5,6,7,8,9]

#方式3:range(i,j,k)	i:起始值,j:到第j个数结束(不包含j),k:步长
r = range(1,10,2)	
print(list(r))		#[1,3,5,7,9]

类与对象

​ Python是面向对象的语言,在Python中,一切皆对象

创建类
class Student:
    native_place = '北京'			#定义类属性
    
    #初始化方法(相当于Java中的构造方法)
    def __init__(self,name,age):
        self.name = name
        self.age = age
    
    #实例方法
    def study(self):
        print('学习')
        
    #类方法
    @classmethod
    def cm(cls):
        print('类方法')
        
    #静态方法
    @staticmethod
    def sm():
        print('静态方法')
创建对象
#创建Student类的对象
stu1 = Student('zs',20)
stu2 = Student('ls',22)
#调用类中的方法
stu1.study()				#学习
Student.study(stu1)			#学习

#动态绑定属性
stu1.gender = '男'
print(stu1.gender)			#男

#动态绑定方法
def show():
    print('定义在类外部的函数')
stu1.show = show
stu1.show()				#定义在类外部的函数
stu2.show()				#AttributeError
封装
#在类中定义外部访问不到的属性:使用两个下划线__
class BankAccount():
    def __init__(self,id,money):
        self.id = id
        self.__money = money		#私有属性,不能直接被外部访问
        
#可以用这种方法访问
acc = BankAccount('123456',500)
print(acc._BankAccount__money)		#500
继承
#语法为 class 类名(父类名):
#默认继承Object
#python支持多继承 class 类名(父类1,父类2):

#定义父类
class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
	def info(self):
        print('姓名{0},年龄{1}'.format(self.name,self.age))
#定义子类
class Student(Person):
    def __init__(self,name,age,score):
        super().__init__(name,age)
        self.score = score
        
stu = Student('zs',20,90)
stu.info()				#姓名zs,年龄20

#方法重写
class Teacher(Person):
    def __init__(self,name,age,teachYears):
        super().__init__(name,age)
        self.teachYears = teachYears
    def info(self):
        super().info()
        print('教龄{0}'.format(self.teachYears))
多态
class Animal():
    def eat(self):
        print('动物吃食物')

class Dog(Animal):
    def eat(self):
        print('狗吃肉')
        
class Cat(Animal):
    def eat(self):
        print('猫吃鱼')
        
class Person():
    def eat(self):
        print('人吃五谷杂粮')
        
def fun(animal):
    animal.eat()
    
fun(Dog())			#狗吃肉
fun(Cat())			#猫吃鱼
fun(Person())		#人吃五谷杂粮
浅拷贝

​ Python拷贝一般都是浅拷贝。拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象。

深拷贝

​ 使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同。

特殊属性

#__dict__:获得类对象或实例对象所绑定的所有属性和方法,存为字典
#__class__:获取对象所属的类
#__bases__:获取类的所有父类类型,存为元组
#__bases__:获取类的第一个父类类型
#__mro__:获取类的层次结构
#__subclasses__():获取类的所有子类,存为列表

特殊方法

#__add__():通过重写该方法,实现自定义对象类型的加法运算
#__len__():通过重写该方法,让内置函数len()的参数可以是自定义类型
Class Student:
    def __init__(self,name):
        self.name = name
    def __add__(self,other):
        return self.name + other.name
    def __len__(self):
        return len(self.name)
    
stu1 = Student('张三')
stu2 = Student('李四')
print(stu1 + stu2)		#张三李四

模块

​ 在Python中,一个.py文件就是一个模块(Module),模块可以包含函数、类和语句。

使用模块的好处:

  1. 方便其他程序和脚本的导入并使用
  2. 避免函数名和变量名冲突
  3. 提高代码的可维护性
  4. 提高代码的可重用性
创建模块

​ 新建一个.py文件,名称尽量不要与Python自带的标准模块重名。

导入模块

import 模块名称 [as 别名]

from 模块名称 import 函数/变量/类

PS:导入自定义模块前需要先将被导入模块所在目录设置为Sources Root

以主程序形式运行
#在每个模块的定义中都包括一个记录模块名称的变量__name__,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其他程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的__name__变量的值为__main__。
#可以在被导入模块中加入以下语句
if __name__ = '__main__':
    pass
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值