栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python基础语法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python基础语法

Python基础语法
    • 1.注释
    • 2.变量——存储数据
    • 4.运算符
    • 5.输入与输出
    • 6.流程控制语句
    • 7.函数
    • 8.类
    • 9.文件


1.注释
#我是一行单行注释

'''
多行注释
注释一般在代码上行写,
有的时候会将当行注释写在代码后面
'''

2.变量——存储数据

1)变量的类型

1.number(数值)
int
float (没有double)
complex

2.boolean(布尔)
True #注意不要写成小写,true不存在
False

3.string(字符串)
用引号括起来,可以是单引号,也可以是双引号
注意: 在用单引号括起的字符串中若有撇号,则会出错,python会将第一个单引号和撇号之间的内容视为一个字符串。

#就近匹配
"'...'"   # √
'"..."'   # √
""...""   #×
''...''   #×

操作:

s1+s2    #使用+来拼接字符串
len(s)   #获取长度
s.split(参数)    #通过参数内容切割字符串,返回列表
'''
修改字符串大小,注意只是返回的字符串大小改变
'''
s.title() #以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。
s.upper()     #返回纯大写的字符串
s.lower()      #返回纯小写的字符串

'''
删除空白,注意并不是永久删除,需要将结果存储到变量
空白:泛指任何非打印字符,eg空格、制表符t、换行符n
'''
s.rstrip()  #删除末尾的空白
s.lstrip()  #删除开头的空白
s.strip()   #同时删除开头和末尾的空白

s.find(subs)  #查找指定的内容subs在字符串s中是否存在,如果存在就返回内容第一次出现在字符串中的索引值
s.startwith(subs)  #判断字符串是否以subs开头,是返回True,否则返回False
s.endwith(subs) #。。。结尾
s.count(subs)   #返回subs出现的次数
s.replace(旧的字符串,新的字符串) #用新的字符串替代旧的字符串,如果指定了次数,则替换个数不会超过指定的数

4.list(列表)

用[ ]表示列表,列表是有序集合,有索引——列表名称[索引]。索引从0开始,为方便,Python提供了一种特殊语法,通过让索引指定为-1,可让Python返回列表最后一个元素,-2返回倒数第二个元素…
注意: 使用列表索引不要越界,当列表为空时list[-1]会出现错误

操作:

list————增删改查

增:
list.append(v)   #在列表末尾添加元素v
insert(i,v)         #在索引为i的元素前插入v,即v变成索引为i的元素
list1.extend(list2)   #将list2的元素逐一添加到list1中

改:
list[i]=v   #将索引为i的值修改为v

查:
list[i]   #索引

#in,not in
if v in list:     #存在返回True,否则返回false
	print("存在")

if v not in list: #不存在返回True,否则返回false
	print("不存在")

删:
del list[i]   #删除索引为i的元素
list.pop()   #删除最后一个元素,并返回元素的值
list.remove(v)   #删除值为v的元素,多个的话删除第一个

len(list)   #获悉列表的长度

'''
组织列表
'''
list.sort()    #对列表进行从小到大的排序,
list.sort(reverse=True) #从大到小的顺序排列
sorted(list)   #对列表进行临时排序,即列表顺序实际不变,只返回排序后列表
#要反序可以给sorted()传递参数reverse=True
list.reverse() #将列表反过来

5.tuple(元组)

列表非常适合用于存储运行期间可能变化的数据集,列表是可以修改的。但我们有时需要创建一系列不可修改的元素,元组可以满足这种需求。

元组是用圆括号()定义的,可以用索引访问元素,可遍历,不可以修改元素。只能修改元组变量的指向。

#元组若元素只有一个的话,需要在元素后面加一个逗号
print(type((1)))  #type(数据)返回数据的类型
print(type((1,)))

#输出:



切片
————对操作的对象截取其中一部分的操作。
字符串,列表,元组都可以进行切片操作

#以list为例
#创建切片
list[m,n,r]   #返回列表从索引m到索引n(不包含),以r为步长截取的列表,省略r则为1
[m:]   #返回包含从索引m到末尾的内容
[:,n]  #返回包含从索引0到n(不包含)的内容

#遍历切片——和遍历列表一样

#复制列表——创建一个包含整个列表的切片
list_new=list[:]
list_new=list  #无效,list_new和new是指向同一个列表

6.dict(字典)

字典是一系列键值对,用{ }括起来,其中每个键都与一个值相关联,
键与值之间用冒号分隔,而键值对之间用逗号分隔。

操作

list————增删改查

查:
dict[key]   #返回value  若不存在则发生异常
dict.get(key)   #返回value,若不存在不会出现异常,返回None

if k in dict:       #如果k存在就返回v
	print(dict[k])  

if k not in dict:           #如果不存在,就添加一个
	dict[k]=v  


#修改不成就添加
改:
dict[k]=v 

增:
dict[k]=v   #不存在的k

删:
del dict[k] 
del dict      #整个字典都删除了,字典对象不存在
dict.clear()    #清空字典,变成空字典{}
 

嵌套

#字典列表,列表的每一个元素都为字典
[{},{},{},....]

#在字典中存储列表,一个键有多个值时,可以用列表存储,对于值需要遍历得到
{key:[],....}

#在字典中存储字典
{key:{},....}

2)查看变量数据类型type(变量名)

注意:在python中只要定义一个变量,而且它有数据,那么它的类型就已经确定了,不需要我们主动说明,系统会自动判断。
实质:变量没有类型,数据才有类型

a=12
print(type(a))
a=2.3
print(type(a))
a='sad'
print(type(a))

#输出:




3)类型转换

a、转换成整数
int(x)
x为字符串,字符串内容为数值(且不是浮点数值)‘1.23’转不了
x为浮点数,则返回整数部分
x为布尔类型,True则返回1,False则返回0

b、转化为浮点数
float(x)
字符串x内容为数值型

c、转化为字符串
str(x)

d、转化为布尔类型
bool(x)
x为数值型数据,非0的返回True,0返回False
x为字符串,当字符串不是空的,则返回True,否则False
x为列表,元组,字典,只要不为空,就返回True,否则返回False

#为False: 
bool(0)
bool(0.0)
bool('')
bool("")
bool(())
bool([])
bool({})

4)命名规范
– 只能包含字母,数字,下划线。且以字母或下划开头
– 不能将Python关键字和函数名用作变量名
– 遵循简短+具有描述性
– 慎用小写字母l和大写字母O
– 变量名小写


什么是变量 有哪些变量 变量的操作


4.运算符

1)算术运算符
+、-、*、/、//(取整,整除)、%、**(幂)

'''
1.字符串有+,代表拼接
非字符串和字符串进行拼接时要将非字符数据str()转为字符串
事实上str()的参数也可以是字符串
2.字符串有*
代表“复制”
'''
>>'wy'*3
  wywywy

2)赋值运算符

python允许同时给多个变量赋值

a=b=10
a,b,c=1,2,3   #则a=1,b=2,c=3
print(a,b,c)  #1,2,3

复合赋值运算符
+= 等

3)比较运算符
==、<=、>=、!=、<、>

4)逻辑运算符

and
or
not

性能优化:短路


5.输入与输出

1)输出
a、普通输出
print(…)

b、格式化输出

# %s  代表字符串   %d  代表数值
name,age='wy',20
print('name: %s, age: %d' % (name,age))

2)输入

input()   #!!!!返回字符串类型

6.流程控制语句

1)条件(分支)

#1.if
if  判断条件:
	语句    #true则执行

#if-else
if  判断条件:
	语句
else:
	语句
	
#if-else-if
if  判断条件:
	语句
elif 判断条件:
	语句
else:
	语句
'''
注意:if-elif结构可以去掉else语句,有些情况下不使用else代码块
而使用elif代码块来处理特定的情形会更清晰,且每个代码块都仅在通过相应的测试才会执行,
可以防止引入无效甚至恶意的数据。

'''

2)循环

——遍历

(1)for循环

for 变量 in 要遍历的数据:
qquad 循环体

可遍历的数据:

1.字符串,元组
2.数字序列

#使用range()函数得到不超过区间的连续整数
range(m,n) #代表[m,n-1]区间
range(n)   #代表range(0,n),
range(m,n,r) #r代表步长。
#使用list()可以将range()的结果直接转换为列表
list(range(1,5))  #[1,2,3,4]

#对数字列表的统计计算:
max(list)
min(list)
sum(list)

3.遍历列表

for i in list:
	print(i)

#通过下标
for in range(len(list)):  
	print(list[i])
	
'''
列表解析:将for循环和创建列表元素的代码和在一起
列表名=[创建列表元素  for循环]
'''
#得到的列表sequence为[1,9]
sequence=[value**2 for value in range(1,5,2)]

4.遍历字典

#dict,keys()返回键
for k in dict.keys():     
	print(k,dict[k])
	
#dict.values() 返回v,每个元素的v都输出,哪怕重复
for v in dict.values():    
	print(v)
	
#想要返回不重复的v值,可以用set函数
for v in set(dict.values()):         
	print(v)

for v,k in dict.items():
	print(v,k)
	
#i是dict的元素,即一个键值对	
for i in dict.items()      
	print(i)
	
#按顺序变量字典中的所有键	
for key in sorted(字典名.keys())
	print(i)
  
a={1:3,7:4}
for i in a.items():
    print(i)  
#输出
(1, 3)
(7, 4)
    

(2)while循环

quad for循环是一种遍历列表的有效方式,但是在for循环过程中,不便修改列表,否则将导致Python难以跟踪其中的元素。要在遍历列表的同时对其进行修改,可使用while循环。

while 条件测试:
    ...
in
not in
while v in list
	remove(v)    

有关循环:
1.使用break退出循环,使用continue跳过一次循环
2.避免无限循环,出现无限循环的运行可以通过Ctrl+C停止
3.技巧:使用标志。在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志 ,充当了程序的交通信号灯。你可让程序在标志为True 时继续运行,并在任何事件导致标志的值为False 时让程序停止运行。这样,在while 语句中就只需检查一个条件——标志的当前值是否为True ,并将所有测试(是否发生了应将标志设置为False 的事件)都放在其他地方,从而让程序变得更为整洁。


7.函数

def 函数名(形参):
qquad 函数体

函数调用时的参数传递
——函数调用:f(实参)。函数调用中的每个实参都关联到函数定义中的一个形参
1)位置参数
按位置顺序将实参关联到函数定义中对应的形参
2)关键词参数
关键字实参是传递给函数,名称-值对。在实参中直接将名称和值关联起来了。则无需考虑函数调用中实参的顺序。

函数名(参数名=值,…)

3)默认值
定义函数时,可以给参数一个默认值,调用函数时,提供实参,则使用指定值,否则使用默认值。
注意:
使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的,即有默认值的参数定义时放在最后

4)传递列表
可修改列表(循环修改的话用while方便,当然可以用for索引循环修改列表)。如果不想修改列表,可以传递列表的副本——切片(复制列表)

5)传递任意数量的实参
有时不知道函数需要接受多少个实参,Python允许函数从调用语句中收集任意数量的实参。

'''
1.在可接受任意数量的形参前面加一个*表示该参数变量是一个元组:适用于传递的是位置参数
2.两个*即**表示为一个字典:适用于传递的是关键词参数
'''
#*————元组
def f(name,*info):
    print(name,info)
f('wy','男',20,'singer')
#输出
wy ('男', 20, 'singer')

#**————字典
def f(name,**info):
    print(name,info)
f('wy',sex='男',age=20,work='singer')
#输出
wy {'sex': '男', 'age': 20, 'work': 'singer'}

注意:
1.结合使用位置参数和任意数量实参时,必须将接纳任意数量实参的形参放在函数定义的形参列表最后
2.位置参数不能放在关键词参数后面,哪怕对应了自己的顺序,所以一般不要将位置参数和关键词参数混着用,除非位置参数的位置都在关键词参数之前

函数返回值

return 返回值

函数的局部变量和全局变量

——局部变量:在函数内部定义的变量,在函数外部不能使用

如果您需要创建一个全局变量,但被卡在本地作用域内,则可以使用 global 关键字。
global 关键字使变量成为全局变量。

def myfunc():
  global x
  x = 100

myfunc()
print(x)  #100

8.类

(1)定义,使用

class 类名():   #约定类名使用大驼峰
    def __init__(self,参数1,参数2,...):  #
        self.属性1=参数1
        self.属性2=参数2
        ....
        
    def 函数(self):   #表示类的行为
        ....    

说明:
1)方法__init__() 是一个特殊的方法,每次根据类创建实例时Python都会自动调用。
该方法名称前后都有两个下划线,这是一个约定,旨在避免Python的默认方法与普通方法名称发生冲突。
2)所有函数的参数self必不可少,还必须位于其他参数的前面,该参数对应的实参是python自动传入的,我们不需要传它
是一个指向实例本身的引用,让实例可以访问类中的属性和方法,
3)类中使用属性变量的格式为 self.属性名
类外使用的格式为 实例/对象名.属性名
类外调用方法的格式为 实例名.函数名(实参)
反正类里用self,类外用实例名
4)创建多个实例,每个实例都是一个独立的空间
5)__init__方法的参数可以是任意数量参数
6)给属性指定默认值
类中的每个属性都需要初始值,要么通过参数给属性赋值,要么给属性一个默认值,如果给了默认值,则可以不用传入为了提高初始值的参数,当然也可以提供(与默认值不一样时)。

class User():
    def __init__(self, fname, lname, **other):
        self.fname = fname
        self.lname = lname
        self.a = {}
        self.hobby = 'food'
        for k, v in other.items():
            self.a[k] = v

    def describe(self):
        print(self.fname + ' ' + self.lname)
        print(self.a)
        print(self.hobby)

    def greet(self):
        print('hello ' + self.fname)


user = User('roy', 'Wang', age=20, work='singer', sex='男')
user.describe()
user.greet()

#输出
roy Wang
{'age': 20, 'work': 'singer', 'sex': '男'}
food
hello roy


(2)继承

1)创建子类时,父类需包含在当前文件且位于子类前面 ,或者导入父类
2)定义子类时,必须在类名后的括号里指定父类的名称
3)子类的init函数的参数需要提供父类init所需的参数,并在函数体内用super调用父类的init函数
4)重写父类方法:对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类 中定义的相应方法。

(3)导入类

1)导入模块的类
from 文件名(模块名) import 类名
from 文件名 import 类名1,类名2,…
2)导入整个模块
import 模块名
要访问模块中的类,则需要使用符合. 模块名.类名
3)导入模块中的所有类
from 模块名 import *
不推荐使用该方法,导入的类名不清楚,容易引发名称问题
如果需要使用一个模块的多个类最好使用第二种方法,然后使用模块名.类名来操作类
虽然文件开头并没有列出用到的所有类,但你清楚地知道在程序的哪些地方使用了导入的模块;
你还避免了导入模块中的每个类可能引发的名称冲突。
4)标准库中的类
模块random中import randint,
randint(a,b)返回一个位于指定范围[a,b]内的一个整数
注意:
1)当一个类A需要使用另一个类B时,可以把它们放在一个模块,用import A,或者分成两个模块,A所在的模块导入B,主模块导入A
2)如果一个类与另一个类是继承关系时,放在一个模块的话,在主模块需要使用子类的话还要记得导入父类。所以有继承关系的类,可以将子类与父类放在不同模块,在子类的模块里导入父类,在主模块里就只要导入子类。


9.文件

(1)打开/创建文件

#打开/创建文件
file_object=open(文件路径,访问模式)   # 返回文件对象
file_object.read()  #一字节一字节地读,效率较低
file_object.readline()  #一行一行读但是返回的是列表形式,列表的元素即为文件一行一行的内容
file_object.write()

#with open 的形式
# 读取整个文件
with open('pi_digits.txt') as file_object:
    contents = file_object.read()
print(contents)
'''
1.with open 形式不需要调用close()将文件关闭,python会自动关

2.read函数读取整个文件的内容,相比于原始文件,会在末尾多一个空行。——因为read() 到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。要删除多出来的空行,可在print 语句中使用rstrip() :
'''
with open('pi_digits.txt') as file_object:
    contents = file_object.read()
    print(contents.rstrip())

#逐行读取文件
filename = 'pi_digits.txt'
    with open(filename) as file_object: 
	    for line in file_object:
	        print(line)
#open函数返回的对象只在with代码块内有效
with open(filename) as file_object: 
    lines = file_object.readlines()
for line in lines:
print(line.rstrip())

(2)文件路径
1.当文件与当前程序文件在同一目录下,则只需要文件名即可,
2.相对路径:不在同一目录,但在该目录的子目录中,则可以使用相对路径(相对于当前运行的程序所在的目录)
3.绝对路径

#需要用\表示
with open('C:\Users\ann\Desktop\11.txt') as file_object:
    contents=file_object.read()
    print(contents)

(3)模式

open(文件路径,模式)

'w’表示以写入的方式打开文件;
---- open返回的文件对象名.write(写入的内容)
'r’表示以读取的方式打开文件;
'a’表示以追加
'r+'表示既可以读取又可以写入
'a+'表示可以读,可以追加

注意:

1)python只能将字符串写入文本文件,将数值数据存储到文本文件中, 必须使用str()函数将其转换为字符串格式
2)write不会在写入的文本末尾添加换行符,因此需要使用空格、制表符、空行等符号来设置输出格式
3)以w的模式写入文件,如果文件不存在,则会自动创建;如果已经存在,则会先清空再写入 如果不想之前的内容被覆盖,可以以追加的方式写入

(4)序列化

我们可以将字符串写入本地文件,但是不能是一个对象(列表,字典,自定义类对象等)
TypeError: write() argument must be str, not list,所以需要将对象进行序列化才能写入文件中,Python提供了JSON模块实现数据的序列化与反序列化。
quad JSON(JavascriptObjectNotation,JS对象简谱) 是一种轻量级的数据交换库,JSON的本质是字符串

1.序列化:

将要存储的数据,先进行序列化,“去掉” 原本的数据类型,变成字符串,再写入文件

#dump和dumps

json.dumps(a)   #将对象a转化为字符串

1.dumps():
import json #先import模块json
with open('1.json','w') as file:
    a=[1,2,5]
    r=json.dumps(a)
    print(r,type(r))      #[1, 2, 5] 
    file.write(r)
2.dump()
#json.dump()接受两个参数:要存储的数据,用于存储数据的文件对象
import json
with open('1.json','w') as file:
    a=[1,2,5]
    json.dump(a,file)

2.反序列化:

从文件中读出数据,进行反序列化,“恢复” 数据该有的类型

#loads,load

1.loads()
import json
with open('1.json') as file:
    content=file.read()
    print(content,'   ',type(content))
    content=json.loads(content)
    print(content,'   ',type(content))

#输出
[1, 2, 5]     
[1, 2, 5]     

2.load()
import json
with open('1.json') as file:
    content=json.load(file)
    print(content,'   ',type(content))

#输出
[1, 2, 5]     

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293825.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号