Python函数和模块总结

文件操作

with open("xxx/xx/xx","wra+",encoding="utf-8")as f:

        f.read()

        f.write()

        f.readline()

        f.readlines()

# 使用with open比直接使用open更加方便,直接使用open需要.close()关闭文件,否则会出现资源滥用

# 模式主要有以下几种

        w 写模式,向指定文件写入内容,没有则创建一个新文件,写入的内容会覆盖掉原有文件的内容

        r 读模式,想指定文件读内容,内容不存在则报错

        a 向指定文件追加内容,文件存在是追加不存在是新建再追加

        x 文件存在则报错,创建再写。

        + 让模式不止只有读写一种功能,而是即读又写

补充 与t连用表示读写的数据是文本类型可是省略默认就是文本类型,比如wt/rt等

        与b连用表示读写的数据是二进制类型,图片视频就属于二进制类型的数据,wb,rb等

        路径相关

                window下,用r转义\或者双写\\转义

                                       r ”C:\Users\username\Desktop“

                                        ”C:\\Users\\username\\Desktop“

                Linux下,/

                                        /etc/passwd

                相对路径,相对于当前的路径去查找的路径

                                        project/text.txt

                绝对路径,从根目录去找的路径(相对于相对路径来说更加准确)

                                        C:\Users\username\Desktop\project/text.txt

开发了,为了项目的兼容性(在各个系统上都能运行),使用路径时通常都是使用内置函数拼接路径

        import os

                # 1.获取当前运行的py脚本所在路径
                abs = os.path.abspath(__file__)

                # 2.获取项目当前文件夹的路径

                path = os.path.dirname(abs)

        

函数 

定义

        def func():

                pass

调用

        func()

参数

        形式参数:在定义函数时函数预定义的变量参数

                        def  text(var1,var2)

        实际参数:在调用时所传入函数的参数

                        text(1,2)

        位置传参:在传入实际参数时,如果是按照位置的前后参与参数就称为位置传参

        关键字传参:通过参数的命名参数而是通过位置传参

                                def text(var1,var2)

                                text(var1=1,var2=2)

         定义函数时可以给实际参数传一个默认值,但调用函数时不传参则使用默认参数的值,传参就使用传入的值

                                def func(a1, a2, a3=10):

         位置和关键混合使用时,关键字传参要写在后面

                                func(12, 9, a3=90)

         动态参数:当形式参数前面加一个*号时,表示传入的参数是可变的,可以传入很多参数                

                       def func(*args)

                        func(22)
                        func(22,33)

                        当形式参数前面加一个**号时,表示传入的参数是一个字典类型,并且并不规定数量

                        def func(**kwargs)

                        func("name" = "siri","age"=18)

函数的返回值

        函数的返回值可以是任意类型

        函数的返回值默认是None   

        函数一旦遇到return就会立即退出函数

        函数的返回值返回的是一个地址

函数执行传参时,传递的是内存地址

函数在只有执行了才会在内存开辟一片内存地址,只被定义没有被调用时并未来开辟内存空间

函数执行完毕之后,函数内部的变量都会被释放,内存地址的引用计数器-1

函数的默认参数会创建一块区域并维护这个默认值,但参与参数时会指向新的地址

动态参数不仅在设置形参时可以用,在传递实参时也可以

函数名只是一个变量,它代指函数本身

作用域

        一块内存空间,空间的数据是可以共享,但同时也是相互独立的

        python中一个函数就是一个作用域,在作用域里面定义的变量称局部变量

         一个py文件里定义的称全局变量

        局部作用域中想使用某个变量时,寻找的顺序为,优先在局部作用域寻找,没有再去上一级寻找

        局部作用域无法对全局变量进行重新赋值

        global关键字可实现局部作用域对全局变量进行重新复制

装饰器 

基于特殊的闭包开发出了一个在函数执行前后增加功能的函数

def outfunc(oringe):
    def inner():
        print("执行前")
        res = oringe()
        print("执行后")
    return inner
@outfunc
def fun1():
    pass
fun1()

@outfunc就成为装饰器,等同fun1 = outfunc(fun1)

fun1 此时应该是等于outfunc的返回值的,也就是fun1=inner

所以fun1()等于inner()

上述代码的输出结果为

执行前
执行后

匿名函数

定义函数时包括函数名和函数体,匿名函数就是通过lambda定义一个没有函数名的函

lambda 参数:函数体

只能写单行代码,返回值为代码执行结果

lambda x : x*x

三元运算

条件成立 if 条件 else 条件不成立

“错误” if i <= 0 "正确"

生成器

函数中有yield存在时,这个函数就是生产生成器函数。  

执行生成器函数时会返回一个生成器对象

通过next(name)会调用生成器对象,每调用一次就会从上一次的位置基础上再继续向下执行。

推导式

通过一行代码实现创建list、dict、tuple、set 的同时初始化一些值。

 list = [ i for i in range(10)]

元组

        不会立即执行内部循环去生成数据,而是得到一个生成器。

模块 

一类函数功能的集合,通常一个模块就是一个py文件

多个朋友文件组成的文件夹就叫做包

  包中一般都有一个默认的__init__.py文件

        用来注释当前包的内容

导入

在Python内部默认设置了一些路径,导入模块或包时,都会按照指定顺序逐一去特定的路径查找。

'/Applications/PyCharm.app/Contents/plugins/python/helpers/pycharm_display',
    '/Library/Frameworks/Python.framework/Versions/3.9/lib/python39.zip',
    '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9',
    '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload',
    '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages',
    '/Applications/PyCharm.app/Contents/plugins/python/helpers/pycharm_matplotlib_backend'

想要导入任意的模块和包,都必须写在如下路径下,才能被找到。

import sys
sys.path.append("路径A")

当执行一个py文件时

        __name__ = "__main__"

所以开发中一般会在入口文件出写上

if __name__ == "__main__" :

       run()

深浅拷贝

浅拷贝

不可变类型,并未拷贝地址,拷贝的只是地址指向

可变类型,当只有一层时,拷贝的是变量地址,但嵌套多层时只拷贝第一层

深拷贝

        不可变类型并未拷贝地址,拷贝的只是地址指向

        可变类型,找到所有层级的 【可变类型】或【含有可变类型的元组】 均拷贝一份

元组

        元组元素中无可变类型,不拷贝

        元素元素中有可变类型,找到所有【可变类型】或【含有可变类型的元组】 均拷贝一份

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值