模块2:函数和常用模块

不同目录间进行模块调用

 

作业需求:

模拟实现一个ATM+购物商城程序

 

1.额度 15000或自定义

2.实现购物商城,买东西加入 购物车,调用信用卡接口结账

3.可以提现,手续费5%

4.每月22号出账单,每月10号为还款日,过期未还,按欠款总额 万分之5 每日计息

5.支持多账户登录

6.支持账户间转账

7.记录每月日常消费流水

8.提供还款接口

9.ATM记录操作日志

10.提供管理接口,包括添加账户、用户额度,冻结账户等。。。

11.用户认证用装饰器

 

Python模块详解及import本质

1.定义

  • 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能)本质就是.py结尾的python文件(文件名:test.py,模块名:test)
  • 包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件

2.导入方法

  • 导入一个方法:Import module_name
  • 导入多个方法:Import module1_name,module2_name
  • 导入模块里所有方法:from module_name import *
  • 导入模块里多个方法:from module_name import m1,m2.m3
  • 导入特定方法:from module_name import X as Y

 

3.import本质(路径搜索和搜索路径)

  • import模块的本质:把python解释一遍,然后所有代码赋值给了module_name(这个变量)

1.import module_name    #相当于所有代码赋值给了module_name(这个变量),使用module_name里面的方法或变量时,必须使用module_name.X进行调用

2.from module_name import X    #相当于打开module_name这个文件只导入X这个变量,使用该X时直接调用即可

 

  • import包的本质:执行该包下面的__init__.py文件

1.1import module_name ——>module_name.py——>module_name.py的路径——>sys.path

1.2获取当前文件路径:os.path.asbpath(__file__)是一个列表,获取当前文件目录os.path.dirname(os.path.asbpath(__file__)),获取上一层文件目录os.path.dirname(os.path.dirname(os.path.asbpath(__file__)))

1.3再将该文件目录追加到系统sys.path.append(XXX)获Insert(Y,XXX)

 

2.1导入包就是运行__init__.py文件,那么,我们将模块导入到包就可以在使用时通过包进行调用:在__init__.py文件里使用相对导入:from . Import module_name 模块

4.导入优化

import module_test

def logger():
        module_test.test()
        print("in the logger")

def search():
        module_test.test()
        print("in the search")

解析:在两个函数中,每次调用module_test.test都需要事先进行一个导入module_test后再进行方法test的查找,那么我们如何改变这种情况呢?

 

优化:

from module_name import test (as alias)

def logger():
        test()
        print("in the logger")

def search():
        test()
        print("in the search")

 

 5.模块的分类

标准库:

 

6.shutil模块:

shutil.copyfileobj(fsrc,fdst) #将文件src内容复制到文件dst

 

import shutil

f1=open("1.txt",encoding="utf-8")
f2=open("2.txt",encoding="utf-8")
shutil.copyfileobj(f1,f2)

 
shutil.copyfile(src,dst) #拷贝文件,不用事先打开,后台打开
shutil.copyfile(1.txt,2.txt)

 
shutil.copymode(src,dst) #拷贝权限,内容,组,用户均不变
shutil.copyfile(1.txt,2.txt)

 
shutil.copystat(src,dst) #拷贝状态信息,包括:mode bits,atime,mtime,flags
shutil.copyfile(1.txt,2.txt)

 
shutil.copy(src,dst) #拷贝文件和权限
shutil.copyfile(1.txt,2.txt)

 
shutil.copy(src,dst) #拷贝文件和权限
shutil.copyfile(1.txt,2.txt)


shutil.copytree(src,dst) #递归的去拷贝文件
shutil.copyfile(f1,f2)

 
shutil.copyrmtree(path) #递归的去删除文件
shutil.copyfile(f2)

 

shutil.move(src,dst) #递归的去移动文件
shutil.copyfile(1.txt,2.txt)

shutil.make_archive(base_name,format,path) #创建压缩包并返回文件路径
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www  =>保存至当前路径
如:/Users/huwei/www =>保存至/Users/huwei/
format:  压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir:要压缩的文件夹路径(默认当前目录)
owner:  用户,默认当前用户
group:  组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象

 

shutil.copyfile("test","zip"."/Users/huwei")

注意:shutil对压缩包的处理是调用ZipFile和TarFile两个模块来进行的:

 

zipfile 压缩解压

import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()

 
# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close()

 

 

tarfile 压缩解压

import tarfile

# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/huwei/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/huwei/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()

 
# 解压
tar = tarfile.open('your.tar','r')
tar.extractall()  # 可设置解压地址
tar.close()

 

8.shelve模块:

import datetime

import shelve

f1=shelve.open("shelve_test")

info={"job":"it","age":29}
name=["maria","dick","jacky","sophie"]
f1["name"]=name  #持久化列表
f1["info"]=info  #持久化字典
f1["date"]=datetime.datetime.now()
f1.close()

解析:执行后,不用dumps直接写入文件,如何读取:

import datetime

import shelve

f1=shelve.open("shelve_test")

print(f1.get("name"))
print(f1.get("info"))
print(f1.get("date"))
执行结果:
['maria', 'dick', 'jacky', 'sophie']
{'job': 'it', 'age': 29}
2017-07-13 23:35:03.980317

 

 

 

 

 

configparser增删改查语法

 

 

作业:

开发一个简单的python计算器

实现加减乘除及拓号优先级解析

用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

posted @ 2017-07-07 19:53  Mr.hu  阅读(220)  评论(0编辑  收藏  举报