Python函数与模块(1)

    技术2022-07-12  90

    1. 函数的定义与使用

    1.1 函数的定义

    def function_name(params...): # sonmthing to do return some_value #根据需求确定有无

    1.2 函数的基本调用

    # 无返回值 function_name(params...); # 有返回值 function_name(params...); value=function_name(params...);

    1.3 函数的使用技巧(IMPORTANT)

    1.3.1 参数默认值

    # python默认值和c++类似,都是在定义语句中声明(c++可以在声明语句中) # 而且都是前面为无默认值参数,后面为默认值参数,参数不可以混写 def student_introduce(name,job="student"): print("My name is {} , and i am a {} .".format(name,job)) student_introduce("Jack","student") --> My name is Jack , and i am a student . student_introduce("Jack") --> My name is Jack , and i am a student .

    1.3.2 关键字传参

    def toomuchparams(a,b,c,d,e,f,g): print(a,b,c,d,e,f,g) toomuchparams(a=1,b=2,d=4,f=6,g=7,e=5,c=3) --> 1 2 3 4 5 6 7

    1.3.3 声明必须使用关键字传参

    def toomuchparams(a,b,c,d,*,e,f,g): print(a,b,c,d,e,f,g) toomuchparams(1,2,3,e=5,d=4,f=6,g=7) --> 1 2 3 4 5 6 7 # 位置传参要放在关键字传参之前

    1.3.3 返回多个参数

    # 返回多个参数可以返回List、Dict…类型的数据,或者结合使用(JSON) def people(name,age,sex,sal): dict={} dict["name"]=name dict["age"]=age dict["sex"]=sex dict["sal"]=sal return dict jack=people("Jack",25,"male",5000) jack --> {'name': 'Jack', 'age': 25, 'sex': 'male', 'sal': 5000} jack.get("name") --> 'Jack' jack.get("age") --> 25 jack.get("sex") --> 'male' jack.get("sal") --> 5000

    1.3.4 序列传参

    def people(name,age,sex,sal): dict={} dict["name"]=name dict["age"]=age dict["sex"]=sex dict["sal"]=sal return dict info=["Jack",25,"male",5000] #List、Tuple、String、Range jack=people(*info) jack --> {'name': 'Jack', 'age': 25, 'sex': 'male', 'sal': 5000}

    1.3.5 Dictionary传参

    def people(name,age,sex,sal): print("{}--{}--{}--{}".format(name,age,sex,sal)) # 也可以传入字典直接使用format_map()函数 jack={'name': 'Jack', 'age': 25, 'sex': 'male', 'sal': 5000} people(**jack) --> Jack--25--male--5000

    1.4 函数的传参与返回值指针与传值的问题和内存地址问题(个人看法,不太成熟,仅供参考)

    传入参数规则:传入参数,如果是可变参数传指针,不可变参数传值内存分配规则:可变类型改变值时,直接在对应内存中改变值。不变类型改变值时,生成一块内存储存并指向新内存如果传值时内存中出现相同的数据类型且相同的值,该变量直接指向原来内存。所以,函数刚传入的值获取ID,与传入值的ID相同返回值经验:返回值的ID,是与函数中最后一个改变位置的变量的ID相同

    2. 模块与包

    2.1 模块

    2.1.1 介绍

    模块就是一个程序(.py)

    2.1.2 导入模块

    import

    导入寻找:当前包 --> 内置函数 --> sys.path(环境变量)

    # 环境变量 import sys sys.path --> ['D:\\pycharm\\PyCharm Community Edition 2019.3.1\\plugins\\python-ce\\helpers\\pydev', 'D:\\pycharm\\PyCharm Community Edition 2019.3.1\\plugins\\python-ce\\helpers\\third_party\\thriftpy', 'D:\\pycharm\\PyCharm Community Edition 2019.3.1\\plugins\\python-ce\\helpers\\pydev', 'D:\\virtualenv\\MyTest\\Scripts\\python37.zip', 'D:\\python\\DLLs', 'D:\\python\\lib', 'D:\\python', 'D:\\virtualenv\\MyTest', 'D:\\virtualenv\\MyTest\\lib\\site-packages', 'D:\\virtualenv\\MyTest\\lib\\site-packages\\setuptools-40.8.0-py3.7.egg', 'D:\\virtualenv\\MyTest\\lib\\site-packages\\pip-19.0.3-py3.7.egg', 'D:\\study\\python\\MyTest', 'D:/study/python/MyTest'] # 加目录 sys.path.append(...)

    2.1.3 模块属性

    dir(module) --> 列出对象的所有属性和方法

    help(module) --> 查看类,方法的帮助信息

    module.__name__ --> 模块的名称

    module.__file__ --> 模块文件的全路径

    module.__doc__ --> 文档注释

    """ 文档注释__doc__ """ def des(): """ help()中的信息 :return: """ print("Package.Package1_1.tools.py") ############################################# import Package.Package1_1.tools help(Package.Package1_1.tools) Result: Help on module Package.Package1_1.tools in Package.Package1_1: NAME Package.Package1_1.tools - 文档注释__doc__ FUNCTIONS des() help()中的信息 :return: FILE d:\study\python\mytest\package\package1_1\tools.py ############################################## import Package.Package1_1.tools Package.Package1_1.tools.__doc__ Result: '\n文档注释__doc__\n' ############################################## import Package.Package1_1.tools Package.Package1_1.tools.__file__ Result: 'D:\\study\\python\\MyTest\\Package\\Package1_1\\tools.py' ############################################# import Package.Package1_1.tools Package.Package1_1.tools.__name__ Result: 'Package.Package1_1.tools' ############################################ import Package.Package1_1.tools dir(Package.Package1_1.tools) Result: ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'des']

    2.1.4 标准模块——OS模块

    函数和变量

    函数和变量描述os.environ环境变量void(command_operation) os.system(command)命令行os.sep路径的分割符os.pathsep分割不同路径的分割符os.linesep行分割符(‘\n’、’\r’、’\r\n’)String sys.argv[n]命令行参数,包括脚本名String getcwd()当前目录void chdir(path)调转到目录sys.modulesDictionary,将模块名映射到加载的模块os.pathList,包含要在其中查找模块的目录的名称sys.platform平台标识符void mkdir(file)创建文件夹void makedirs(path)创建一系列文件夹void rmdir(file)删除文件夹List listdir(dir)文件夹目录,Listimport os import sys os.environ --> environ{(.......)} os.system('calc') --> 打开计算机上计算器 os.sep --> '\\' os.pathsep --> ';' os.linesep --> '\r\n' os.getcwd() --> 'D:\\study\\python\\MyTest' os.chdir("Package") os.getcwd() --> 'D:\\study\\python\\MyTest\\Package' os.listdir("Package1_1") --> ['tools.py', '__init__.py', '__pycache__'] os.path --> <module 'ntpath' from 'D:\\python\\lib\\ntpath.py'> sys.modules --> {..................} sys.platform --> 'win32' os.mkdir("hello") --> 文件夹被创建 os.rmdir("hello") --> 文件夹被删除 os.makedirs('D:\\study\\python\\MyTest\\Package\\Test\\Test1\\Test2') --> 一系列文件夹被创建 ################################## # test.py import sys print("hello") print(sys.argv[0]) print(sys.argv[1]) Result: (MyTest) D:\study\python\MyTest>python test.py this hello test.py this

    os.path 文件目录相关操作

    函数和变量描述Bool os.path.isdir(element)是否为文件夹Bool os.path.isfile(element)是否问文件Bool os.path.exists(path)是否存在String os.path.dirname(file)文件目录Tuple os.path.split(file)文件目录和文件分割String os.path.basename(file)文件名Tuple os.path.splitext(file)从后缀开始分割String os.path.join(path1,dir…,file)连接路径import os os.listdir() --> ['.idea', 'h.png', 'Package', 'test.py'] os.path.isdir('Package') --> True os.path.isdir('test.py') --> False os.path.isfile('Package') --> False os.path.isfile('test.py') --> True os.path.exists("Package") --> True os.path.exists("Package_test") --> False os.path.dirname("D:\\study\\python\\MyTest\\h.png") --> 'D:\\study\\python\\MyTest' os.path.split('D:\\study\\python\\MyTest\\h.png') --> ('D:\\study\\python\\MyTest', 'h.png') os.path.basename('D:\\study\\python\\MyTest\\h.png') --> 'h.png' #List String.split(element)可以得到后缀 os.path.splitext('D:\\study\\python\\MyTest\\h.png') --> ('D:\\study\\python\\MyTest\\h', '.png') os.path.join('D:\\study\\python\\MyTest\\h.png',"Test","Test1","test2") --> 'D:\\study\\python\\MyTest\\h.png\\Test\\Test1\\test2'

    2.1.5 标准模块——Datetime

    函数和属性和类

    函数和属性和类描述datetime.timedeltaclass,用于日期时间加减操作datetime.datetimeclass,时间对象datetime.dateclass,日期对象datetime.datetime datetime.datetime.now()系统的当前时间datetime.time datetime.datetime.today()当前时间datetime.date (Class:Datetime).datetime.date()获取日期datetime.time (Class:Datetime).datetime.time()获取时间yearDate、Datetime对象的属性monthDate、Datetime对象的属性dayDate、Datetime对象的属性minuteTime、Datetime对象的属性hourTime、Datetime对象的属性secondTime、Datetime对象的属性microsecondTime、Datetime对象的属性weeksTimedelta的属性daysTimedelta的属性hoursTimedelta的属性minutesTimedelta的属性secondsTimedelta的属性microsecondsTimedelta的属性millisecondsTimedelta的属性from datetime import datetime,date,time,timedelta datetime.now() --> datetime.datetime(2020, 7, 1, 22, 5, 39, 952395) datetime.today() --> datetime.datetime(2020, 7, 1, 22, 5, 56, 524328) datetime.now().date() --> datetime.date(2020, 7, 1) datetime.now().time() --> datetime.time(22, 6, 48, 360162) timedelta(weeks=1) --> datetime.timedelta(days=7) datetime.now()-timedelta(weeks=1) --> datetime.datetime(2020, 6, 24, 22, 8, 11, 419876) datetime(2020,2,1,12,31,0)-datetime(2020,12,1,12,31,0) --> datetime.timedelta(days=-304) # 属性值不展示

    时间转换参数表

    参数意义%Y四位年份%y两位年份%m月份(1~12)%B月份名%A星期名%d日(1-31)%pam或pm%H小时(24小时制)(0-23)%l小时(12小时制)(1-12)%M分钟数(0-59)%S秒数(0-61)

    时间转换函数

    函数描述String (Class:Datetime).strftime(format)将datetime对象格式化成字符串Datetime datetime.datetime.strptime(String,format)将字符串按照一定的格式转换成datetime对象from datetime import datetime,date,time now=datetime.now() now.strftime('%Y-%m-%d-%H-%M') --> '2020-07-01-21-54' now.strftime('%Y-%m-%d') --> '2020-07-01' now.date().strftime('%Y-%m-%d') --> '2020-07-01' now.time().strftime('%H-%M') --> '21-54' datetime.strptime("2020/7/1/21/59",'%Y/%m/%d/%H/%M') --> datetime.datetime(2020, 7, 1, 21, 59) datetime.strptime("2020/7/1",'%Y/%m/%d') --> datetime.datetime(2020, 7, 1, 0, 0) datetime.strptime("21/59",'%H/%M') --> datetime.datetime(1900, 1, 1, 21, 59)

    自定义datetime、date、time(构造函数)

    函数描述Datetime datetime.datetime(year,month,day,hour,minus,second)自定义datetimeDate datetime.date(year,month,day)自定义dateTime datetime.time(hour,minus,second)自定义timeimport datetime type(datetime.datetime(2020,7,1,21,33,21)) --> <class 'datetime.datetime'> type(datetime.date(2020,7,1)) --> <class 'datetime.date'> type(datetime.time(21,33,21)) --> <class 'datetime.time'>

    2.1.6 第三方模块安装和卸载

    安装方法1: pip install XXX安装方法2:下载模块并解压 --> 命令行到模块目录 --> python setup.py.install安装方法3:下载模块不解压 --> python install XXX(Tab键可以提示)安装方法4:下载.whl --> python install XXX(Tab键可以提示)安装方法5:编译器(如pycharm)下载卸载方法:pip uninstall XXX

    2.2 包

    2.2.1 介绍

    用来组织模块

    包中可以包含包,包即为模块

    目录必须包含__init__.py

    可以解决命名冲突问题

    c --> 头文件(解决函数和常量命名冲突) c++ --> 头文件(解决函数和常量命名冲突)&&命名空间(解决函数、常量、类的命名冲突) java -->(解决类的命名冲突) python -->(解决模块的命名冲突)&&模块(解决函数、类、常量的命名冲突)

    2.2.2 引入

    import package --> 引入包import package.XX.module --> 引入模块from package.XX.module/pakage import XX(All *) --> 引入包或模块中部分或全部内容from package.XX.module/pakage import XX as XX --> 引入包或模块中内容,并命名导入包就是导入__init__.py模块在包的__init__.py模块中可能要import导入包、模块和导入模块中内容不同

    2.2.3 自定义包

    包的结构(类似)
    Processed: 0.016, SQL: 9