Python函数与模块(1)

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 函数的传参与返回值指针与传值的问题和内存地址问题(个人看法,不太成熟,仅供参考)

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

2. 模块与包

2.1 模块

2.1.1 介绍
  1. 模块就是一个程序(.py)
2.1.2 导入模块
  1. import

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

  3. # 环境变量
    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 模块属性
  1. dir(module) --> 列出对象的所有属性和方法

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

  3. module.__name__ --> 模块的名称

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

  5. 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模块
  1. 函数和变量

    函数和变量描述
    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)文件夹目录,List
    import 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
    
  2. 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
  1. 函数和属性和类

    函数和属性和类描述
    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)
    # 属性值不展示
    
  2. 时间转换参数表

    参数意义
    %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)
  3. 时间转换函数

    函数描述
    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)
    
  4. 自定义datetime、date、time(构造函数)

    函数描述
    Datetime datetime.datetime(year,month,day,hour,minus,second)自定义datetime
    Date datetime.date(year,month,day)自定义date
    Time datetime.time(hour,minus,second)自定义time
    import 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. 安装方法1: pip install XXX
  2. 安装方法2:下载模块并解压 --> 命令行到模块目录 --> python setup.py.install
  3. 安装方法3:下载模块不解压 --> python install XXX(Tab键可以提示)
  4. 安装方法4:下载.whl --> python install XXX(Tab键可以提示)
  5. 安装方法5:编译器(如pycharm)下载
  6. 卸载方法:pip uninstall XXX

2.2 包

2.2.1 介绍
  1. 用来组织模块

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

  3. 目录必须包含__init__.py

  4. 可以解决命名冲突问题

    c --> 头文件(解决函数和常量命名冲突)
    c++ --> 头文件(解决函数和常量命名冲突)&&命名空间(解决函数、常量、类的命名冲突)
    java -->(解决类的命名冲突)
    python -->(解决模块的命名冲突)&&模块(解决函数、类、常量的命名冲突)
    
2.2.2 引入
  1. import package --> 引入包
  2. import package.XX.module --> 引入模块
  3. from package.XX.module/pakage import XX(All *) --> 引入包或模块中部分或全部内容
  4. from package.XX.module/pakage import XX as XX --> 引入包或模块中内容,并命名
  5. 导入包就是导入__init__.py模块
  6. 在包的__init__.py模块中可能要import
  7. 导入包、模块和导入模块中内容不同
2.2.3 自定义包
  1. 包的结构(类似)
    在这里插入图片描述
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值