Python基础语法—8小时入门版

# Author By Mikigo
# Time 2021/9/30

一、Python基础

(一)输入输出

1. print

(1)print("hello world") 括号表示调用函数print,括号内的字符串用引号引起来。

(2)print("hello","world","mikigo") 可接受多个参数。

(3)print(name)不加引号表示调用变量。

(4)print(100+200) 不加引号,表示直接运算。

2. input

(1)input() 输入,光标会等待键盘输入。

(2)input("请输入内容") 括号内建议输入提示信息。

(3)input输入的值都会被当成字符串,包括数字。

(二)数据类型

1. 整数 int 没有小数点。

2. 浮点数 float :有小数点。

3. 布尔值 bool :True 或 False 。注意首字母大写。

4. 空值 None :空值,但和0有区别。

5. type() 查看数据类型(isinstance)。

(三)变量、表达式

1. 变量赋值

(1)name="mikigo" 表示将mikigo这个字符串赋值给变量name,注意要加引号,不加引号会被认为是一个变量

(2)a,b,c=7,8,9 多元赋值,表示将值一一对应的复制到等号前面的变量,但位置的个数一定要一致。

(3)数据类型的转换

    - str(age) 表示将变量age转换成字符型

    - int(1.5)表示将float转换成int(取整为1)

    - float(6) 表示将int转换成float

2. 表达式

(1)+ - * /

(2)% 表示取余数

(3)// 表示取商数

(4)** 表示次幂 ,比如10**5 表示10的5次幂

(四)字符串string

1.格式化字符串

(1)%d(data) 表示数字站位

(2)%s(string) 表示对字符串站位

(3)%r 任何类型都可以接收,但字符串最终打印出来有引号。

(4)格式:print("%s = %d" % (age,19))

(5)"mikigo{}".format(("good",))

(6)f"mikigo{good}"

2.字符串操作

(1)字符串相加 比如:"mi"+ "ki" >miki

(2)* 比如:2*"mi"> mimi

(3)[ ] 表示通过索引截取字符,第1个字符索引是0

(4)[ : ] 表示截取字符串 比如:[2:4]表示从索引2开始,截取到索引3(不包含4)

(5)in 表示in后面字符串中是否包含in前面的字符,比如 "i" in "miki" >>True

(6)not in 用法与in类似但是取反

(7)r/R 表示所有字符都按照字面意思来使用。比如:print(r"hello mikigo") 换行字符 不起作用,直接输入引号内的字符串。

3.字符串的常见函数方法

(1)len(str) 返回字符串的长度

(2)count计数

- "mikigo".count("mi") 直接跟字符或字符串,则返回字符出现的次数

- "mikigo".count("i",2,10) 表示在索引2到10之间(不包含10),返回字符出现的次数

(3)startswith或endswith 以什么开始或以什么结束

- "mikigo".startswith("m") 表示判断是否以字符m开始,>true

- "mikigo".endswith("m") 表示判断是否以字符m结束,>False

(4)find 查找字符或字符串,返回索引位置,如果找不到会返回-1

- "mikigo".find("i") 表示找出字符i在字符串中第一次出现的索引位置,>1

- "mikigo".rfind("i") 表示从右开始找出字符i在字符串中第一次出现的索引位置,>3

(5)index 用法同find,区别在于,找不到时会报错

(6)strip 删除或截掉

- " mikigo ".strip() 删除前后的空格

- " mikigo ".rstrip("o") 删除右边的字符o

- " mikigo ".lstrip("m") 删除左边的字符m

(7)replace 替换

- "mikigo".replace("i","oo") 表示将字符串中的所有字符i替换称字符串oo

- "mikigo".replace("i","oo",1) 表示将字符串中的字符i替换为oo,只替换一次

(8)join 加入:"miki".join("ab") >> "amikib" 每个字符拆开,加入某个字符或字符串。

(9)split 以分隔符截取

- "mikigo".split("i") 表示以字符i作为分隔符,将字符串进行分隔。

- "mikigo".split("i",1) 表示以字符i作为分隔符,以第1个i作为字符串的分隔符 进行分隔。

- "mikigo
hello".splitlines() 或  "mikigo
hello".splitlines(keepends=False) 表示按行("
","
","
")分隔(不包含换行符)。

- "mikigo
hello".splitlines(keepends=True) 表示以
换行,且包含换行符。

- 扩展: 多种方式分割字符串  re.split('a|b', 'fdasfweqgasfewaq')

(五)列表(list)

1.list基本操作

(1)列表(list)用[ ]表示,是有序,可变,可指定位置取值的。

(2)列表里面的元素,可以是任意数据类型,包括列表、None、bool

(3)同一列表中可存放不同的数据类型

2.切片

(1)lst[index ]取单个元素,直接跟索引。比如lst[2],表示取索引2的元素

(2)lst[0:2] 取一个区间。表示取索引0到1的元素

(3)lst[0:5:2] 表示按步长2去取索引0到4之间的元素。

(4)lst[-1] 表示取最后一个

(5)lst[::-1] 表示将一个列表反向排序

3.list常见的函数和方法

(1)函数

1)len(list) 列表的长度,即列表中元素的个数

2)max(list) 相同的数据类型取最大值。

(2)方法

  1)list.append(obj) 在列表末尾添加新的对象。list.append("ab"),表示在末尾加入字符串"ab",但append一次只能增加一个元素。

  2)list.count(obj) 统计某个元素在列表中出现的次数。

  3)list.extend(seq) 在末尾追加另一个序列。追加的是一个列表,不能是单个元素。比如list.extend([123])

  4)list.index(obj) 找出某个元素的第一个索引位置。

  5)list.insert(index,obj) 将对象插入到列表(位置,元素)

  6)list.pop(index) 删除某个位置的元素(默认删除最后一个)。比如list.pop(1)表示删除索引1的元素,且返回元素的值。

  7)list.remove(obj) 删除列表中的某个元素的第一个,修改列表本身。

  8)list.reverse() 反向排序

  9)list.sort() 重新排序

  10)list.clear() 清空列表

  11)list.copy() 复制列表

(六)元组(tuple)

1.定义:以小括号括起来的有序列表,但不能修改。

2.eg. a=(2,3,4,5)

(七)字典(dict)

1.定义:字典是用大括号括起来,由键值对(key:value)组成的,且是无序的。

2.key是唯一的,一般赋值为string,value可以是任意数据类型

3.常用操作

(1)dt["key"] 根据键读取值

(2)dt["old_key"]="new_value" 根据键修改值

(3)dt["new_key"]="new_value" 新增键值对

(4)len(dt) 返回元素的量(键值对)

4.dict常用方法

(1)key in dict 判断键是否在字典中

(2)dict.items() 返回列表,列表由元组组成,每个元组由一个键值对将键和值拆分为两个字符串组成。

(3)dict.keys() 将所有的键组成一个列表。

(4)dict.values() 将所有的值组成一个列表。

(5)dict1.update(dict2) 将字典2中的键值对添加到字典1中

(6)dict.get(key,default=None) 返回指定键的值,如果值不存在,返回default值。比如:dict.get("name","peter") 如果字典中有name这个键,则直接返回其对应的值,如果没有这个键,则返回"peter"

(7)dict.setdefault(key,default=None) 和get一样会返回指定键的值,但若键不在字典中,会添加成为新的键值对。比如:dict.setdefault("name","peter"),如果字典中有name这个键,则返回其对应的值,如果没有,则会将定义的值,添加到字典中。

(8)dict.pop(key,default=None) 删除键对应的值,key不存在返回default值。

(9)dict.copy() 浅复制

(10)dict.clear() 清除所有元素

二、过程控制

(一)条件语句

if 条件判断:(缩进和冒号)
	print("字符串")
else:
	print("字符串")

2.else 可以不要,语法上没有问题

3.运算符

1)< , <= , > , >= , == , !=

2)and , or , not , in , not in, is

(二)循环语句

1.while

while 判断条件:
  	语句
else :
 	 语句
 ②break 终止循环语句

 ③continue 结束本次循环,继续进行下一轮循环。

2.for语句(遍历序列的元素)

for i in [1,2,3,4]:
	print(i)
  • in 后面可以跟元组、列表、字符串,但跟字典时只能取到字典中的键(key)。

  • range(函数)

    • range(3) 表示从索引0,取到索引2(开区间)
    • range(1,4) 表示从索引1,取到索引3
    • range(1,10,2) 表示从索引1,取到索引10,步长为2

三、函数

(一)定义

函数是可重复使用的,具有一定功能的代码段。

1)def 函数名(参数1,参数2,····)

def add(a,b):
 c = a + b
 print(c)

(二)返回值

调用函数后,将执行结果返回给调用者。

def add(a,b):
   c = a + b
   return c

>>x=add(1,2) #返回一个c的值赋给x,如果返回值有多个,而变量只有1个,则会生成一个元组。也可以用多个变量对应多个返回值,即多元赋值。

(三)参数

1、位置参数(形参)

def func(name,age):
    print(name,age)

位置参数时根据位置顺序传入函数,调用函数时必须与定义时的参数数量一致。

2、默认参数

  • def func(name,age=18): print("a未被定义") # 参数在定义的时候就赋值的

  • 默认参数在调用的时候如果不传入,则会使用默认参数,如果给传递了参数,则值会被覆盖。

3、可变参数

def func(*args):
   sum = 0
   for n in args:
   	 sum = sum +n
   	 return sum

>>func(1,2,3,···) #传入的参数数量可变,会自动组装称一个元组,如果传入0个参数,结果时返回一个空元组。

  • 如果传入的参数是一个元组,调用的时候在函数括号内加*号(参数解构)

    tp=(1,2,3,4)

    resule = add(*tp)

4、关键字参数(键和值)

def func(**kwargs):
    print(kwargs)

>>func(name="peter") # 结果是打印一个字典{"name":"peter"}

  • 如果传入的参数是一个字典,调用的时候在函数括号内加**

    >>dct = {"eat1":"酸辣粉","eat2":"螺狮粉"}

    >>func(**dct)

5、组合参数

顺序为位置参数,可变参数,默认参数,关键字参数

def func(name,age,*args,gender=’男’,**kwargs)

四、类(class)

(一)类的实例

1.类的实例是对象,一个实例包含属性(有什么)和方法(能做什么)。

2.类的声明:class 类名(): #类名单词首字母大写,如果是多个单词,单词与单词之间不空格,直接挨着写,但每个单词首字母需要大写。

3.定义类的属性和方法

class Person():

	def __init__ (self,name,age):  # __init__是固定格式,`self`也是固定格式。
		self.name = name
		self.age = age  #定义了两个属性。
	def run(self,food):
		print("%s都%d岁了,天天吃%s" % (self.name,self.age,food))  #定义了一个方法。(外部变量不加self)

(2)方法调方法或方法调属性等,内部调用都要加self。 ②

(3)调用外部变量时,不加self。

(4)调用

① 实例化:x = Person("peter",18)

② print(x.name) 调用类的属性

③ print(x.run("肉"))

(二)继承

1.子类继承父类的属性和方法

class Student(Person):  #继承时括号内直接写父类的类名
		pass #完全继承父类的属性和方法。
class Student(Person):

	def __init__(self,name,age,cno)
		Person.__init__(self,name,age)  
		self.cno = cno #在父类的基础上新增属性,需要先将父类指定进来。否则新增属性会将父类的属性覆盖。
	def run(self):
		r = Person.run(self)
		return r  # 在父类的基础上新增方法,需要先指定父类的方法。

方法重新定义后,调用的时候,默认先去调用子类的方法,然后再去调用父类的方法。

(三)访问限制

1.访问限制可以使,类内部的属性和方法,不能外部随便访问。用法是在属性或方法前面加双下划线,表示私有属性。

2.访问限制,不能被外部随便访问,但可以被内部调用,私有属性可以用方法调用,私有方法,可以定义其他方法调用。

class Person():
	def  __init__(self,name):
		self.__name = name
	def  __eat(self,food):
		return "%s爱上吃%s"% (self.__name,food)

(四)编码规范

1.缩进,4个空格的缩进,空格和tab不能混用(tab仅在编辑器中可使用)。

2.类名的单词以大写字母开头。

3.函数和类的属性命名以小写,用下划线连接

4.所有的命名都应采用有意义的英文单词,多单词由下划线连接。

五、模块

(一)引入模块

(1)import 后面直接跟模块名或类或函数. eg1. import time

(2)from 路径 import 类或函数 #路径最好用绝对路径 eg2. from model.A import add

(二)安装三方库

(1)sudo pip3 install pymysql(三方库名) #在命令行直接输入即可(命令行安装时注意)。

(2)在pycharm里面,点击file,选择setting,选择Project,选择Project Interpreter,在右上角点+号,输入库名即可安装。

(3)如果是需要下载的三方库,下载后查看文件包里面的readme文件,根据描述进行安装。

六、异常处理

(一)try语句

(1)try ... except...except 表示当程序运行错误后,被except捕捉到,返回一个可定义的信息,且不会影响后续语句的执行。每个except后面跟不同的返回信息。

try:
    print(a)
    10/0
except NameError:
    print("a未被定义")
except ....

(2)try ...except...finally 同(1)一样,但finally后的语句,无论是否发生异常,都会执行。

(3)try...except...else 同(1)一样,但else后的语句,是在没有发生异常的情况才会执行。

(二)抛出异常

①>> raise NameError("这是一个名称错误")

(三)常见的异常分类

① AssertionError assert(断言)语句失败。

② AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有x这个属性。

③ IOError 输入/输出异常,基本上是无法打开文件。

④ ImportError 无法引入模块或者包,基本上是路径问题。

⑤ IndentationError 语法错误,代码没有正确对齐。

⑥ IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]。

⑦ KeyError 试图访问字典里不存在的键。

⑧ Kerboardinterrupt Ctrl+C被按下,主要针对无限循环。

⑨ NameError 使用一个还未被赋值予对象的变量。

⑩ SyntaxError 代码非法,代码不能解释。

⑪ TypeError 传入对象类型与要求的不符。

⑫ UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另一个同名的全局变量,导致你以为正在访问它。

⑬ ValueError 传入一个调用者不期望的值,即使值的类型是正确的。

⑭ FileNotFoundError 试图打开一个不存在的文件或目录。

七、文件读写

(一)以读的形式打开,并能写(r+)

1) >> f = open("test.txt","r+")

>> f.write("xxx")

>> f.flush()

>> f.close()

2)光标会放在文件开头,输入的输入会覆盖开头

(二)以写的形式打开,并能读(w+)

1) >> f = open("test.txt","w+")

>> data = f.read()

>> print(date)

2)若文件已存在会将其覆盖,若文件不存在,会新建文件。

(三)追加模式(a+)

1) >> f = open("test.txt","a+")

2)光标在文件的末尾,写入会追加到末尾,若文件不存在,会新建文件。

with open("test.txt","r+",encoding="utf-8") as f:
	f.write("我是中文")
	f.flush()
没伞的孩子,就要学会在雨中奔跑!
原文地址:https://www.cnblogs.com/mikigo/p/15355046.html