Python复习笔记

  • 简单的数据类型和变量命名规范和其他的都一样,从不一样的列表开始

列表

english = [‘c’,‘b’,‘a’]

  1. 列表的增删改查
    1. 访问:english[0]
    2. 修改english[0] = ‘d’
    3. 添加english.insert(0,‘e’)插入到指定位置
      1. english.append(‘f’)追加
    4. 删除english.pop()弹出最后一个
      1. english.pop(0) 弹出第一个元素
      2. english.remove(‘a’)删除指定元素,删除第一个
      3. del english(0)删除指定位置

  1. 组织列表
    1. sort()永久排序默认按字母顺序排序
    2. sort(reverse=True)按字幕倒序排序
    3. sort()是对对象地址直接进行排序,排序后是永久的
    4. sorted()和sort()用法基本一致但是只是暂时排序不对地址中的对象造成影响
      1. sorted([1,3,2])
      2. [1,3,2].sort()
    5. reverse()倒序数据列表
    6. len(english)输出列表长度

  1. 操作列表
    1. for循环
      1. english = [‘a’,‘b’,‘c’,‘d’]
      2.  for e in english:
         	print(e)
        
    2. range()数值循环,前包含后不包含
      	for value in range(1,5):
      		print(value)
      
    3. 用range()创建数字列表:list(range(1,12,2)),从1-11以步长2的方式创建list
    4. 数字列表的统计,min(),max(),sum()
    5. 一种奇葩写法:squares = [value**2 for value in range(1,11)]
      1. for循环给value提供值,之后value**2计算平方,存入list中
  2. 列表切片
english = ['a','b','c','d']
print(english[0:3]) #输出0,1,2前包含后不包含
也可以这样english[:3] #当前者为0时直接写后边的
还可以这样english[2:] #从索引为2到最后
居然还能这样english[:] #复制当前列表,将原有的list副本存储到新的列表地址下

元组

  • 使用圆括号定义
    tuple = (‘a’,‘c’,‘d’,[‘1’,‘2’,‘3’])
    不可变性,其中tuple和list非常像但是tuple比list多了不可变性,其中的元素不可改变,是其中元素所指向的地址不可变但是地址中的内容可变:
    比如tuple[0]=‘e’,不行
    tuple[3][0]='4’可以,因为tuple[3][0]指向的是一个列表,列表的数值变化了,但是列表的地址不可变

if

– 在Python中,False,0,’’,[],{},()都可以视为假

  1. 和java中不同的是,python中字符串可以直接用==比较
if 1 == 1 :
	print('对')
else :
	print('错')
  1. 使用elif
age = 12
if age < 4:
	print('your admission cost is 0')
if age < 18:
	print('your admission cost is 5')
  1. 使用&& 用and代替,|| 用or代替
  2. 可以使用not in 和 in来判断元素是否在列表中

字典

  1. dict = {‘name’:‘json’,‘length’:30}
    和map很像,使用dict[‘name’]访问
  2. 也可以先定义字典变量再添加值
dict = {}
dict['name']='json'
dict['length']=30;
  1. 修改也是直接根据key进行修改dict[‘name’]=‘xml’
  2. 删除字典中的键值对 del dict[‘length’]
  3. 遍历字典,字典的key是通过hash存储的所以是无序的
dict = {'name':'json','length':30,'age':'12'}
for key,value in dict.items():
	print('key:'+key+'value'+value)
  1. dict.keys()获取字典中的所有key,dict.values()获取所有值
  2. 使用set()去重,set(dict.values)
  3. 字典中如果使用重复的key则最后一个key会进行覆盖

input()和while()循环

input()函数

  1. name = input(‘请输入你的名字’) # 用户的输入将最为name的值
  2. input接受的都是字符串

while

index = 1
while index <= 10:
	print(index)
	index++
  1. break 退出循环
  2. continue 跳过本次循环
while 'a' in english:
	english.remove('a')

小结:python中while和java差不多,只是语法格式的改变

函数

## 定义函数,以def开头,括号中直接放参数名
def greet_user(username):
	print("Hello, "+ username.title() + "!")

greet_user('Yunpeng.Gu')

位置实参:

def describe_pet(animal_type,pet_name):
	···

使用位置参数时要按照顺序

关键字实参:

def describe_pet(animal_type,pet_name):
	···

describe_pet(pet_name=‘harry’,animal_type=‘hamster’)
传递实参时用参数名传递

默认值:

def describe_pet(pet_name,animal_type="dog"):
	···

describe_pet(pet_name=‘harry’) 或者describe_pet(‘harry’)

  1. 使用默认参数时,有默认值的参数必须写在后边

返回值

使用return 返回,可以返回各种类型而且不用提前声明

def get_formatted_name(first_name,last_name):
	## 返回字符串
	full_name = first_name + " " + last_name
	return full_name.title()
	## 返回字典
	full_name = {'first_name':first_name,'last_name':last_name}
	return full_name

	····
  1. 函数对对象指向内容的修改是永久的
  2. 函数对变量的修改是暂时的

可变参数

def function_name(*value):
	···
*是python来创造一个空元组,并将收到的值都封装到元组里
如果同时存在其他参数,应把可变参数放到最后且只能有一个可变参数

可变关键字参数:
使用**作为前缀

def build_profile(first,last,**user_info):
	···
	profile={}
	for key,value in user_info.items():
		profile[key]=value

build_profile('gu','yunpeng',location='beijing',age=21,sex='man')

模块

一个py文件就是一个模块
导入模块就是Python解释器打开模块文件然后复制导入的代码

  1. 导入整个模块
import module_name
## 别名,如果起了别名必须使用别名
import module_name mn
  1. 导入特定函数
from module_name import function_name 
## 别名,如果起了别名必须使用别名
from module_name import function_name as fn
## 一次导入多个函数并起别名
from module_name import function_name1 as fn1,function_name2 as fn2
  1. 导入模块中的全部函数
from module_name import *
## 如果Python遇到同名函数将会覆盖所以一般不使用这种方法

def __init__(self,name,age):
	self.name = name
	self.age = age

init()方法,构造方法,必须声明self而且必须在其他参数之前,当创建类的实例时都会运行该方法

  1. 每个与类相关的方法都会自动传递self它是一个指向实例的引用,java中的this
  2. 使用类的方法时不需要手动传递self实参
  3. 类中的方法除了有一个self之外和其他方法没什么区别

继承:

  1. 父类和子类必须在一个文件中(可以使用import引入),如from super_class import SuperClass
  2. 父类必须在子类之前被声明
class ClassName(SuperClass):
	def __init__(self,name,age,sex):
		## 初始化父类时不需要传入self
		super().__init__(name,age,sex)
  1. 重写,和java一样

文件和异常

with open('pi.txt') as file_object:
	contents = file_object.read()
	print(contents.rstrip())
  1. open(),如果想要使用文件就必须使用open打开文件,返回一个文件对象,使用as将这个文件对象的名字起未file_object
  2. 使用文件之后必须关闭文件,否则会造成不可预知的错误
  3. with是python自动判断文件是否使用完毕,然后自动关闭
  4. read(),将文件读出来
  5. rstrip()删除字符串末尾的空白字符串

逐行读取

with open('pi.txt') as file_object:
	for line in file_object:
		print(line)
  1. strip()删除字符串中的空白字符串
  2. 字符串就是一个字符列表,可以使用str_value[:55]来获取前55位
  3. 也可以使用content in str_value 来判断str_value中是否包括content

写文件

with open(path_prefix+"file_write.txt",'w') as file_writer:
    name = input("Please Enter Your Name: ")
    file_writer.write(name)
  1. open()中的’w’表示写模式,默认为’r’
    1. 'r’读取模式
    2. 'w’写入模式
    3. 'a’附加模式
    4. 'r+'读写模式
    5. 'rb’二进制读,'wb’二进制写
  2. 如果要写入的文件不存在Python将创建它,如果存在,将会在创造文件对象之前清空它
  3. write(),将内容写入文件对象中
  4. Python只能将字符串写入文件中,要存储数值要先使用str()函数转成字符串格式
  5. 如果想要写入时换行则要在字符串最后加上\n进行换行

异常

try:
	answer = int(first_number) / int(second_number)
except ZeroDivisionError:
	print("You can't divide by 0!")
else:
	print(answer)
  1. 如果没有异常则执行else的代码块
  2. pass 什么也不做

JSON

  1. json.dump(数据,文件对象)
import json
numbers = [1,3,5,1,2]
with open(filename,'w') as file_obj:
	json.dump(numbers,f_obj)
	将数据以json形式写入文件
  1. json.load(文件对象)
with open(filename,'r') as f_obj:
	json.load(f_obj)
	将数据以json类型解析出来

python小结:python的话还是以后有机会用来造数或者爬虫的话吧,毕竟对python的第三方库不是那么习惯,用起来效率可能不高

csv

1.写文件
1.1 普通写入

	 with open('../config/data.csv', 'w') as csvfile:
     	writer = csv.writer(csvfile)
      	writer.writerow(['id', 'name', 'age']) #写表头
		writer.writerow(['1001', '张三', '22']) #写内容

1.2 指定分隔符

	with open('../config/data.csv', 'w') as csvfile:
		writer = csv.writer(csvfile,delimiter = '#')
		writer.writerow(['id', 'name', 'age']) #写表头
		writer.writerow(['1001', '张三', '22']) #写内容

1.3 同时写入多行

    with open('../config/data.csv', 'w') as csvfile:
        writer = csv.writer(csvfile,delimiter = '#')
        writer.writerows([['id', 'name', 'age'],['1001', '张三', '22'],['1001', '王五', '23'],['1001', '李四', '21']])

1.4 写入字典内容

    with open('data.csv','w') as csvfile:
        fieldnames = ['id','name','age'] #指定表头
        writer = csv.DictWriter(csvfile,fieldnames=fieldnames) #配置表头
        writer.writeheader() #写入表头到文件中
        writer.writerow({'id':'1001','name':'mike','age':'11'}) #写入内容

2 读文件
2.1 使用pandas库进行解析csv
df = pd.read_csv('../config/data.csv',encoding='gbk') print(df)

存储到mysql中

  1. 安装PyMySQL
  2. 测试连接
    	import pymysql
    	# 连接到mysql
    	db = pymysql.connect(host='localhost',user='root',password='root',port=3306)
    	# 获取游标
    	cursor = db.cursor()
    	# 执行sql语句
    	cursor.execute('select 1 from dual')
    	# 关闭数据库连接
    	db.close()
    
  3. 插入,更新,删除都是对数据库进行更改的操作,而更新操作必须作为一个事务
    1. 事务
    try:
    	cursor.execute(sql)
    	db.commit()
    except:
    	db.rollback()
    

存储到MongoDB中

  1. 安装PyMongo
  2. 连接MongoDB
    1. 获取连接客户端
    import pymongo
    client = pymongo.MongoClient(host='localhost',port=27017)
    # 或者client = MongoClient('mongodb://localhost:27017/')
    
    1. 指定数据库为test库
    db = client.test
    # 或者db = client['test']
    
    1. 指定集合为students
    collection = db.students
    collection = db['students']
    
  3. MongoDB可以直接利用构造的字典类型进行插入
student = {
	'id':'1001',
	'name':'李四'
}
result = collection.inset(student)
  1. 更多的PyMongo的API

你可能感兴趣的:(工作,#python)