本文是根据Python从入门到实践这本书开始复习,学习。供各位参考(1-10章)
前言
每次看完就忘,忘了又看,反反复复。这里提供快捷了解python语法方式
提示:以下是本篇文章正文内容,下面案例可供参考
一、Python基础语法
1.三个简单函数
字符串是""双引号引起来,与其他语言不同,
name="adada"
print(name.title())
print(name.upper())
print(name.lower())
title()功能是将字符串以首字母大写方式呈现
upper()将字符串所有字母大写
lower()将所有字符串字母小写
2.删除空白函数
name=" adada "
print(name.strip())
print(name.rstrip())
print(name.lstrip())
strip()删除字符串两边的空白
rstrip()删除字符串右边空白
lstrip()删除字符串左边空白
3.Python加减乘除计算注意点
平方表示:x**x
python浮点数计算是可能不一定精确。小数点位数不确定。
在Python3以上时,3/2=1.5而不是1。与python2不一样。
4.python列表
Python列表用[]表示,并用,逗号分隔其中元素。下标从0开始。
my=['honda','yamaha','suzuki']
向列表添加元素:my.append('元素')
向列表插入指定位置元素:my.insert(index,'元素')
从列表删除指定位置元素:del my[index],且没有返回值。直接对列表操作。从中删除
将列表的值删除,且有返回值,从末尾删除:my.pop(),被弹出的元素不在列表,可用变量接收。
知道删除的值,根据值删除:my.remove('元素'),这应该也算没有返回值
注意:python3里,使用range()返回的并不是列表,而是一个整数序列的对象,若想变成列表
list(range(5))
5.列表排序
sort()方法,可以对列表进行永久性修改的排序,按照字母顺序,sort(reverse=True)则是按照字母顺序相反排序。
sorted()方法,对列表进行临时排序,不会对原来的列表造成影响。同样sorted(reverse=True)相反排序。
reverse()是对列表进行永久性修改的反转列表。
对列表的切片操作相当于是复制了一份列表,在切片后的列表进行一系列操作时,对源列表没有任何关系————my[:]是对整个列表复制,且切片操作也是左闭右开区间my[1:3]从1开始取到第二位。注意:切片与列表赋值操作不一样,赋值只是具有相同的内存地址,并不像切片一样有两个一模一样的列表,赋值还是只有一个列表。若不想修改原有列表可用切片操作(字符串也可以切片)
6.for循环书写格式
for 变量 in 列表:
这是一般的for循环书写格式,对列表进行遍历。
Python使用range(x,y)函数,(左闭右开)来创建简易列表使用list(range(x,y))
在列表里进行for循环:[ value**2 for value in range(1,11)]
7.元组的介绍与使用
元组是用()圆括号来定义的,而且元组不可以修改。一旦定义,只能覆盖重新定义才能增加新数据,取元组里的元素和列表一样,通过元素索引下标来取。
8.if语句的使用
if是判断语句:通常书写格式为
if x==xx: 在条件中,可以使用and、or来连接多个条件。
print()
elif xx>dd: 注意这里不是elseif 我刚开始习惯性打这个
print()
else:
print()
检查列表是否包特定值,用 in (not in) 判断结果会打印Ture、False
if x in xx:
print()
9.字典的使用
字典是键值对方式呈现,通过alien={}创建新字典,以{'key':'value','key':'value'},访问字典的值以字典的名和键来访问
例如
alien={'color':'green','size':10}
alien['color']
alien['size']
可以获取字典的值,也可以通过此方式添加字典的键值对。
修改键值对,直接使用alien['color']='black'
删除键值对:以del alien['color']即可删除这对。
遍历字典是通过for和字典所带的方法items(),items()方法返回的是一个键-值对列表
for key, value in alien.items(),key与value分别取出alien的键值对。
遍历字典获取所有字典的键,用方法keys()
for name in alien.keys(),key()方法返回的是一个列表
按顺序遍历字典所有的键(此顺序只是暂时的并不改变原来顺序)
for name in sorted(alien.keys())
遍历字典所有的值用方法values(),他返回的也是值的列表
for value in alien.values()
10.用户输入与while循环使用
函数input()可以接受用户输入的一个参数,要用一个变量来接受input()函数。input()函数所输入的为字符串,若有需要,可以通过强制类型转换为需要的类型。
message=input("请输入姓名")
print(message)
while循环很简单:while 变量(>、<)条件 : 注意不要缺少:
print()
while循环通过break直接终止退出循环,与continue不同,continue只是不执行这次循环、但是下一次还是执行的,不会退出循环。
11.函数(形参、实参、任意参数)
函数的定义方法: 注意不要缺少:
def hello():
print("hello world")
hello()
函数既可以有参数,也可以没有参数,还可以多个参数。定义函数时括号内叫形参,调用函数时是实参。多个参数要注意顺序,当然也可以直接指定(直接将实参名称与值联系)。
def hello(name):
print("hello world"+name.title())
hello("张三")#或hello(name="张三")
函数也可以有默认值,若在调用函数时,每个形参都指定了具体值,则不用默认值,没指定具体,就用默认值,默认值是可以改变的。
def helloworld(name,password=1234):
print("尊敬的"+name+"您的密码是"+str(password))
helloworld("李四")
helloworld("李四",5678)
若想要传递的函数参数多个,且不确定,可用形参 *变量 ,这样不管参数是一个还是多个都可以处理。
def helloworld(*names):
for i in names:
print(i)
helloworld("李四","王五","赵六")
在形参中,**变量表示形参是一个空字典
def bulid_profile(first,last,**user_info):
profile={}
profile['first_name']=first
profile['last_name']=last
for key,value in user_info.items():
profile[key]=value
return profile
user_info1=bulid_profile("张","三",location='princeton',field='physics')
print(user_info1)
这里要看到,在调用函数时,后面两者是用=赋值,而不是像字典用:,调用函数就是要定向赋值。。具体一对一。在定义函数和调用函数时,形参的参数赋值都用=
12.函数导入
注意:导入整个模块后,调用函数还是要先模块名.函数名() ,
也可以为了方便将模块指定别名(import first as f)
import first
first.hello("李四")
导入特定函数,调用时不用加上模块名,导入模块所有函数调用也不用模块名(from first import * )
from first import hello
hello("李四")
13.类的使用
超级无敌巨重要!!!!
类,白话来说就是抽象为一类东西,比如狗、猫、老虎都属于动物这一个大类。都是抽象出来的,他们三者都有一些共同的特质(活着、会叫、会饿、会撒娇.....)这些相当于类的属性。为什么抽象成类呢,其实是为了代码利用率更高一些。这就是面向对象编程的好处,我的理解是:小狗是一个具体的东西,具体就是对象,类是一个抽象的东西,小狗就是从抽象里的一种具体的东西,就像小狗与动物的关系,小狗属于动物,但是动物不属于小狗,动物拥有的,小狗也基本都有。下面我来创建动物这个类。
class Animals():#类名,开头__init__两边两个下划线,self在init()必须第一位
def __init__(self,name,age):#这个是内置函数,必须写,self不需要赋值
self.name=name#类内部变量使用self.x这样与外部变量区分
self.age=age#self是指向实例本身的引用。,能让实例访问类中属性和方法
#以self开头的变量都可以供类中所有方法使用。
def run(self):
print(self.name+"会跑")
def ages(self):
print("他的年龄是"+str(self.age))
Dog=Animals("小狗",2)#左边是实例化对象,右边是类
Dog.run()
Dog.ages()
给属性指定默认值,这样在init()方法就不需要包含这个形参了
class Car():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading=0 #默认值
def read_odometer(self):
print("this car has "+str(self.odometer_reading)+" miles")
mycar=Car("Audi","a4","2023")
mycar.read_odometer()
修改指定默认值,直接用对象.属性 ,也可以使用方法对self.sodometer_reading重新赋值
class Car():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading=0
def read_odometer(self):
print("this car has "+str(self.odometer_reading)+" miles")
def update_olometer(self,nowmeter):
self.odometer_reading=nowmeter #将函数形参赋值给self
mycar=Car("Audi","a4","2023")
mycar.odometer_reading=100
14.类的继承
一个类继承另一个类时时,他将自动获得另一个类的所有属性和方法,原有的叫父类、新类叫子类,子类继承父类的所有属性和方法,同时还可以定义自己的属性和方法。
class Car():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading=0
def read_odometer(self):
print("this car has "+str(self.odometer_reading)+" miles")
def update_olometer(self,nowmeter):
self.odometer_reading=nowmeter #将函数形参赋值给self
def get_descriptive_name(self):
long_name=str(self.year)+" "+self.make+' '+self.model
return long_name
class ElectricCar(Car):#继承Car类
def __init__(self,make,model,year):
super().__init__(make,model,year)#初始化父类属性,使子类包含父类所有属性
self.batterysize=70#子类自定义属性
def batterysizeprint(self):#子类自定义方法
print("目前还有"+str(self.batterysize)+"的电")
mycar=ElectricCar("Audi","a4","2023")
mycar.odometer_reading=50
mycar.read_odometer()
my_car=mycar.get_descriptive_name()
print(my_car)
mycar.batterysizeprint()
我在这里遇到报错问题!(意思是int对象不可调用)导致这种现象原因是函数名与变量名一样了,所以一定要注意!
'int' object is not callable
重写父类方法其实很简单,就是他们共有的方法不符合子类所具有的性质,怎么办?直接在子类对一模一样的名字的方法改写,符合子类性质即可。不用担心子类是否会调用父类同名方法,在调用时,Python会自动忽视父类同名方法。(我觉得就是你创建的对象是哪个类的就会执行哪个类的方法,不用太纠结)
15将实例用作属性
这个知识点我还是拿出来,因为我觉得挺有趣,而且挺强大的功能。感觉很有用。
class Car():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading=0
def read_odometer(self):
print("this car has "+str(self.odometer_reading)+" miles")
def update_olometer(self,nowmeter):
self.odometer_reading=nowmeter #将函数形参赋值给self
def get_descriptive_name(self):
long_name=str(self.year)+" "+self.make+' '+self.model
return long_name
class ElectricCar(Car):#继承Car类
def __init__(self,make,model,year):
super().__init__(make,model,year)#初始化父类属性,使子类包含父类所有属性
self.battery=Battery() #这里,将Battery()的实例赋值给ElectricCar类的一个属性,每次创建ElectricCar实例时会自动创建Battery()实例
class Battery():
def __init__(self,battery_size=70):
self.battery_size=battery_size
def batterysizeprint(self):
print("目前还有"+str(self.battery_size)+"的电")
mycar=ElectricCar("Audi","a4","2023")
mycar.battery.batterysizeprint()
#这里就是创建了ElectricCar实例mycar,然后mycar调用类本身属性battery也就相当于调用Battery()类,
16.Python标准库中的collectons模块中一个类OrderedDict
这个类的功能就是在添加字典的键值对时,记录添加键值对的顺序
from collections import OrderedDict
favourite_language=OrderedDict()
favourite_language['jen']='python'
favourite_language['sarch']='c'
favourite_language['edward']='ruby'
favourite_language["phil"]='python'
for name,language in favourite_language.items():
print(name.title()+" 's favourite language is"+language.title())
有没有大神知道我这里定义字典键用" "和' '有没有区别。不懂。 好像没区别,应该是
16.文件读取、写入与异常
with open('Python.txt') as file_object:#打开一个文件,并返回一个文件对象,
contents=file_object.read()#读取文件的内容
print(contents)
若使用绝对路径寻找文件在文件路径使用反斜杠(\)
with open('Python.txt') as file_object:#打开一个文件,并返回一个文件对象,
for line in file_object:#逐行读取
print(line.rstrip())#去除末尾空白行
with open('Python.txt') as file_object:#打开一个文件,并返回一个文件对象,
contents=file_object.readline()#读取文件的内容每一行,并存为列表
for line in contents:
print(line)
文件写入:
filename='programming.txt'
with open(filename,'w') as file_object:#打开文件对象,以写的方式
file_object.write("I love Python.\n")#写入
对于已存在的文件,若用w方式,会覆盖原有文件内容,想附加文件内容
filename='programming.txt'
with open(filename,'a') as file_object:#打开文件对象,以写的方式
file_object.write("I love c.\n")#写入
异常处理:
异常是使用try-except代码块处理的, try-except代码块让python执行指定操作,同时告诉python发生异常时该怎么办,使用try-except代码块,即使遇到异常,程序也能继续运行,显示你编写的友好错误信息,而不至于让用户迷糊的traceback
使用try-except,一般try部分是放入可能导致错误的代码行,如果执行没问题,Python直接跳出eexcept代码块,如果报错,Python执行except,如果正常执行try代码块,则可以把后继代码放入else中,依赖于try代码块成功执行的代码都放入else中,
while True:
first_number=input("\nFirst number")
if first_number=='q':
break
second_number=input("second number")
try:
answer=int(first_number)/int(second_number)#强制转换
except ZeroDivisionError:
print("除数不能为0")
else:
print(answer)
17.最后一点点
方法split(),作用是以空格为拆分符,将字符串拆分为多个部分,并将这些部分存储到一个列表结果中。
Python中有一个pass语句,就是告诉Python什么都不需要做,直接跳过。
18.存储数据:
这个挺重要的,是关于json的。
json.dump():这个存储数据,具有两个实参(要存储的数据及可用于存储数据的文件对象):用来存储数字列表
import json
number=[1,2,3,4,5,6,7]
filename='number.json'#空文件
with open(filename,'w') as file_object:
json.dump(number,file_object)
json.load():将数据读取到内存中,加载文件的信息
import json
filename='number.json'
with open(filename) as file_object:
number=json.load(file_object)
print(number)
代码重构其实就是把一个函数拆分细分多个函数,划分更加具体。
总结
以上就是要讲的内容,本文仅仅简单介绍了Python基本语法使用,后期会继续学这本书后面项目部分的内容。感谢观看。