java中的接口是类吗
239
2022-09-01
python快速入门—————附完整示例代码
文章目录
0 背景1 基本概念和操作
1.1 概念1.2 操作
2 基本数据结构
2.1 list(列表)2.2 tuple(元祖)2.3 dict(字典):2.4 Set(集合)————字典的特殊形式2.5 相互转换
3 条件、循环
3.1 条件(if)3.2 循环(while)
4 函数(def)5 异常(try,exception,else,finally)
5.1 捕获处理异常5.2 抛出异常
6 文件、数据管理
6. 1 使用with管理文件读入6.2 打开文件的方法(r,r+,a,a+,w,w+)6.3 进行文件写入和读出6.4 使用pickle进行数据存储和读出6.5 数据库
6.5.1 使用mysql数据库6.5.2 使用sqlite数据库
7 类(class)
7.1 基本类的创建7.2 装饰器
7.2.1自带属性
7.2.1.1 property属性7.2.1.2 staticmethod和classmethod属性
7.2.2 自定义属性
7.2.2.1 不带返回值、参数7.2.2.2 带返回值、参数
7.3 继承
8 print使用9 排序10 模块
0 背景
因为项目涉及到做数据分析,因此需要用到python,所以借此机会学习了一些基本的python语法,学习使用的参考书籍为《Head first of python》,该书以实际的小项目为指引,从中穿插各种基本语法,学习起来也不枯燥。 本文正是以参考书籍为大纲,展开的python常用语法总结。
1 基本概念和操作
1.1 概念
num = [1, 2, 3, 4]for n in num: print(n) # 操作代码
import sysprint(sys.path)
9,切片格式:[起始偏移量 start:终止偏移量 end[:步长 step]]注意:左封右开
name2 = 'qwer'print(name2[0:2])# 打印qw
10,打印模块中的所有变量和方法:
import mathprint(dir(math))
11,返回全局和局部命名空间里的名字
print(locals())print(globals())
12,方法串链(从左到右)
data = ' 12345,789'print(data.strip().split(','))
13,函数串链(从右到左)
data = [1, 5, 2, 4]print(sorted(data))
14,工厂函数创建某种类型的新数据线:
例如:
a = dict() # 创建字典类型数据
1.2 操作
name = ['江雪韩', 'hjx']print(type(name)) # 查看数据类型print(len(name)) # 查看长度if isinstance(name, list): # 判断类型 print("It's list")print(id(name)) # 打印idfor i, n in enumerate(name): # 列出数据和数据下标 print('i: ' + str(i) + ' n:' + n) name2 = 'qwer'for i in range(len(name2)): # 打印字符串 range(start,stop[,step]) 开始,结束,步长 print(name2[i])
2 基本数据结构
2.1 list(列表)
特点:可以存储任何类型的数据
[]
操作:
sch = []sch.append("中科大") # 追加到末尾sch.extend("南大", "浙大") # 添加列表sch.insert(1, "复旦") # 在第二个位置添加元素sch.pop(1) # 在删除第二个元素shc.remove('浙大') # 移除第一个出现的元素shc.index('中科大') # 打印元素的位置shc.count('中科大') # 获得指定元素在列表中出现的次数
2.2 tuple(元祖)
特点:不可改变,可以理解为常量类型的列表
()
name = ('江雪')
2.3 dict(字典):
特点:就像map一样,有键和值,一个键可以对应多个值
{}
操作
sch = {1:'南大', 2:'浙大'}sch.keys() # 取出所有key值sch.values() # 取出所有values值#遍历键和值for key,value in sch.items(): print(str(key) + ": " + str(value))# 按键排序sch = sorted(sch.items(), key=lambda sch: sch[0]) # ,reverse=True 是否降序排列sch = dict(sch) # 重现转为idct# 按值排序sch = sorted(sch.items(), key=lambda x: x[1], reverse=True) # reverse为是否降序排列sch = dict(sch)
2.4 Set(集合)————字典的特殊形式
特点:只有键的字典,不能重复的且唯一
a = [1,2,3,1]b = set(a) # 将列表、元组等可迭代对象转成集合
2.5 相互转换
列表转换(字典、元祖、集合):
a = [5, 3, 2, 4, 2]b = ['c', 'p', 'j']c = dict(zip(a, b)) # 转字典print(type(c), c)d = tuple(a) # 转元祖print(type(d), d)e = set(a) # 转集合print(type(e), e) # {2, 3, 4, 5}
元祖转换(同上):
a =(5, 3, 2, 4, 2)b = ['c', 'p', 'j']c = dict(zip(a, b)) # 转字典print(type(c), c)d = tuple(a) # 转元祖print(type(d), d)e = set(a) # 转集合print(type(e), e) # {2, 3, 4, 5}
字典转换(元祖、列表、集合):
dict1 = {1:'a',2:'b',3:'c'}print(list(dict1.keys()))print(list(dict1.values()))print(tuple(dict1.keys()))print(tuple(dict1.values()))print(set(dict1.keys()))print(set(dict1.values()))print(tuple(dict1.items())) #生成元祖为单位的元祖print(list(dict1.items())) #生成元祖为单位的列表print(set(dict1.items())) #生成元祖为单位的集合
3 条件、循环
3.1 条件(if)
格式:
if 条件: # 组elif 条件: # 组 else: # 组
注意:使用not可以对条件取反
3.2 循环(while)
格式:
for 目标标识符 in 序列: # 组
4 函数(def)
作用:复用需要重复使用的代码 格式:
def 函数名 (参数列表): 函数方法
5 异常(try,exception,else,finally)
5.1 捕获处理异常
格式
try: # 捕捉异常 # raise IOErrorexcept IOError as err: # 异常发生时执行 # 处理异常 print('The file is not writting' + str(err)) # 忽律异常 pass # 空语句或null语句else: print('没有异常发生') finally: # 异常无论是否发生,都会执行 print('finally')
5.2 抛出异常
raise [Exception [, args [, traceback]]]
语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
6 文件、数据管理
6. 1 使用with管理文件读入
不使用with读入语句:
try: data = open('/Users/mac/test.txt') print(data.readline(), end='')except IOError as err: print('File Error: '+ str(err))finally: if 'data' in locals(): # 如果文件被打开 data.close()
使用上下文管理器with(不需要手动关闭打开的文件):
try: #上下文管理 with open('/Users/mac/数据科学/test.txt', 'a+') as data: print("It is...", file=data)except IOError as err: print('File Error: '+ str(err))
6.2 打开文件的方法(r,r+,a,a+,w,w+)
默认的打开方式是r
""""a,a+的方式打开文件,附加方式打开 a:附加写方式打开,不可读;a+: 附加读写方式打开w新建只写,w+新建读写,二者都会将文件内容清零,即事先不需要有该文件存在,若已经存在则会覆盖w方式打开,不能读出;w+可读写r只读,r+读写,不创建,即需要事先存在一个文件以供读/读写,若不存在文件会报错"""""
6.3 进行文件写入和读出
例子:
import sysdef test_print(the_list, f = sys.stdout): print(the_list, end='', file=f)try: # 写文件 with open('/Users/mac/PycharmProjects/hello/test3.txt', 'w') as file: test_print([1, 2, '3'], file) # 文件读出 with open('/Users/mac/PycharmProjects/hello/test3.txt', 'r') as file: data = file.readline() print(data)except IOError as err: print('File Error: '+ str(err))
6.4 使用pickle进行数据存储和读出
要求以二进制方法打开文件:
格式:
import pickletry: # 写文件 with open('/Users/mac/PycharmProjects/hello/test.pickle', 'wb') as data: pickle.dump([1, 2, 'a'], data) # 读文件 with open('/Users/mac/PycharmProjects/hello/test.pickle', 'rb') as data: a_list = pickle.load(data) print(a_list)except IOError as err: print('File Error: '+ str(err))
6.5 数据库
6.5.1 使用mysql数据库
import pymysqltry: conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='db_testAnalyzeData', port=9996, charset='utf8') # 连接数据库 cur = conn.cursor() # 使用游标 try: # 执行sql语句 cur.execute('SELECT * FROM Customers') db.commit() # 提交修改 except: # 出现错误,则回滚 db.rollback() data = cur.fetchall() for d in data: print("cust_id: " + str(d[0]) + ' cust_name:' + d[2]) cur.close() # 关闭游标 conn.close() # 关闭数据库连接except Exception: print('查询失败')
使用通配符:
cur.execute( "SELECT quantity,to_big_ratio,is_refund,create_time FROM trans_detail WHERE com_name = %s", (commodityName))
6.5.2 使用sqlite数据库
import sqlite3connection = sqlite3.connect('data.sqlite')cursor = connection.cursor()# 使用通配符cursor.execute("INSERT INTO school(name, dob) VALUES (?,?)", (name, dob))cursor.close()connection.close()
7 类(class)
类的方法(method):代码(共享) 类的属性(attribute):数据(不贡献) 类的实例:实例化后的数据对象
7.1 基本类的创建
其中self为指向类的指针
# 类测试class Athlete: # 构造函数 def __init__(self, a_name, a_age = None, a_grade = dict()): self.name = a_name self.age = a_age self.grades = a_grade # 析构函数 def __del__(self): self.name = '' self.age = 0 self.grades = {} # 比较 def __cmp__(self, other): if self.age > other.age: print('你有点年轻') elif self.age < other.age: print('你有点成熟') else: print('刚刚好') # 下面两个方法作用相同,都是打印类信息 def __repr__(self): # 在命令端口输入对象名,也可以输出 return ('Athlete Class:name、age、grades') def __str__(self): # 只能使用print(对象) grade = '' for key, value in self.grades.items(): grade += str(key) + ':' + str(value) return (self.name + ' ' + str(self.age) + ' ' + grade) # 对字典进行操作 def __getitem__(self, key): # 返回字典值 if key == '田径': return self.grades['田径'] elif key == '游泳': return self.grades['游泳'] elif key == '健身': return self.grades['健身'] else: return 'unknown' def __setitem__(self, key, value): # 设置字典值 self.grades[key] = value def __delitem__(self, key): # 删除字典值 del self.grades[key]a = Athlete('jiangxuehan', 42, {'田径':98, '游泳':82, '健身':90})b = Athlete('james', 36, {'田径':90, '游泳':96, '健身':98})a['田径'] = 92del a['游泳']print(a)a.__cmp__(b)a.__del__()print(a)
__repr__和__str__的区别:
7.2 装饰器
7.2.1自带属性
7.2.1.1 property属性
使用了property属性的方法,调用时不需要加(),为的是提供更加友好访问类数据的方式。
class people: def __init__(self, name): self._name = name self._age = 20 @property # 设置为属性 def age(self): print('@property') return self._age @age.setter # 设置属性值 def age(self, value): if not isinstance(value, int): raise ValueError('年龄非法') if value < 0 or value > 120: raise ValueError('年龄非法') self._age = value @age.getter # 返回属性值 def age(self): print('@age.getter') return self._age @age.deleter # 删除属性值 def age(self): # 删除后就找不到对象属性 del self.agep = people('james')print(str(p.age))people.age = 60print(str(p.age))del p.ageprint(str(p.age)) # 因为属性被删,会报错,AttributeError: age
7.2.1.2 staticmethod和classmethod属性
共同点:
都可以通过不示例化类,就可以直接调用
区别:
classmethod由于默认传递了一个类的本身(cls),因此可以调用类中不需要示例化的方法和数据,用于初始化参数等用途。
class A(): number = 0 @staticmethod def static_test(): print('static_test') @classmethod # 只在类中运行而不在实例中运行的方法 def classmethod_test(cls): # 参数cls就是类本身 print('classmethod_test') cls.number = 20 cls.test() # 调用可以不示例化的方法 def test(): print('test') def print_number(self): print(str(self.number))a = A()a.print_number()A.static_test()A.classmethod_test()# a.classmethod_test()a.print_number()
7.2.2 自定义属性
作用:再不修改已有函数的前提下,扩充已有函数。
7.2.2.1 不带返回值、参数
调用的顺序为:run_time—>warp—>foo
import timedef run_time(func): def warp(): start = time.time() temp = func() # 执行函数 end = time.time() print('程序执行时间: ',end - start) print('warp') return warp@run_timedef foo(): print('hello')foo()# 等同与不用装饰器的foo# foo = run_time(foo)# foo()
7.2.2.2 带返回值、参数
用例:
import timedef run_time(func): def warp(*args, **kwargs): print(type(args)) # print(type(kwargs)) # print(args) # foo的参数列表 # ({'a': 1, 'b': 2, 'c': 3},) print(kwargs) # {'arg2': '1234', 'arg3': 'hahaha', 'arg4': 'lalalala'} start = time.time() temp = func(*args, **kwargs) # 执行函数 end = time.time() print('程序执行时间: ', end - start) return temp return warp@run_timedef foo(n, **kwargs): temp_num = 2 return(n['a'] + 1)*temp_numprint(str(foo({'a':1,'b':2,'c':3}, arg2 = '1234', arg3 = 'hahaha', arg4 = 'lalalala')))# 等同与不用装饰器的foo# foo = run_time(foo)# foo()
*args:用于可变长参数;
**kwargs:用于键值参数。
def test_args(*args): print(type(args)) print(args)def test_kwargs(**kwargs): print(type(kwargs)) print(kwargs)test_args(1,2,'1231')test_kwargs(arg1 = 1, arg2 = '12', arg3 = 'asdf')# 输出:# # (1, 2, '1231')# # {'arg1': 1, 'arg2': '12', 'arg3': 'asdf'}
7.3 继承
class A(list): def __init__(self, number): list.__init__([]) # 初始化父类 self.number = number a = A([1,2,3])a.append(9)print(a)
8 print使用
格式:
import sysprint(value, sep = '', end='\n', file = sys.stdout)
sep:
用来间隔多个对象,默认值是一个空格。也可以输入特定的值(符号、数字、中文都可)来间隔内容。 end:用来设定以什么结尾,默认值是换行符"\n"。也可以输入其他值来结尾。 file:输出的文件,默认为输出到屏幕。
测试:
a = 'qwer'b = 2print(a, b, sep=' | ',end='', file=open('test23.txt','w'))
9 排序
sort和sorted的区别:
sort():原地排序,对原始序列进行改变;
sorted():复制原始序列,对新序列进行排序,并返回,不会修改原始序列。
测试:
a = [1,5,4,2]print(sorted(a)) # [1, 2, 4, 5]print(a) # [1, 2, 4, 5]a.sort()print(a) # [1, 2, 4, 5]
10 模块
格式:
import 模块名from 模块 import 函数
示例:
import mathfrom time import sleepmath.cos(2)sleep(2) # 不使用包名
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~