Python 学习之模块

阅读文本大概需要 6.1 分钟

写在前面

又到了一年一度的六一儿童节,在这里祝自己以及各位小伙伴节日快乐!也许你会说我永远都十八岁,可我只想傲娇地告诉你,我每天都在过六一,好吧。

自从国家教育局把与编程相关的学科内容纳入高中必修课之后,意味着在未来学习编程要从娃娃抓起,所以今天我们来陪着小猪佩奇一起学「Python」

Python

今天我们先补充完函数的知识,之后开始模块的学习。关于函数的知识算上今天是第三天,大家认真地消化一下,打好基础,之后的学习才能游刃有余。

函数

1

常用操作

迭代器1

"""

迭代器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,

直到最后抛出 StopIteration 错误表示无法继续返回下一个值

生成器 generator 都是 Iterator 对象,但 list、dict、str 虽然是Iterable,却不是 Iterator。

把 list、dict、str 等 Iterable 变成 Iterator 可以使用 iter() 函数:

可以被 next() 函数调用并不断返回下一个值的对象称为迭代器:Iterator

"""


print(isinstance([], Iterator))  # F

print(isinstance((), Iterator))  # F

print(isinstance({}, Iterator))  # F

print(isinstance("", Iterator))  # F

print(isinstance((x for x in range(10)), Iterator))  # T


l = (x for x in range(1))

print(next(l))  # 0

# print(next(l))      # StopIteration


# 转成Iterator对象

a = iter([1, 2, 3, 4, 5])

print(next(a))  # 1


print(isinstance(iter([]), Iterator))  # T

print(isinstance(iter(()), Iterator))  # T

print(isinstance(iter({}), Iterator))  # T

print(isinstance(iter(""), Iterator))  # T

装饰器2.1

# 装饰器:是一个闭包,把一个函数当做参数返回一个替代版的参数,本质上就是一个返回函数的函数

# 简单的装饰器

def fun1():

    print("To be a better man!")


def outer():

    print("Do right decision!")

    # fun1()嵌套在outer()函数内

    fun1()

outer()

装饰器2.2

# fun1()被当做参数传入outer()

def outer(fun):

    def inner():

        print("Do right decision!")

        fun()

    inner()  # 内部直接调用inner()

outer(fun1)


def outer(fun):

    def inner():

        print("Do right decision!")

        fun()

    # 内部函数的名字,返回 inner 需要执行

    return inner

# f 是函数 fun1 的加强版本 此时等价于 inner

f = outer(fun1)

f()

装饰器2.3

# 使用 @ 符号将装饰器应用到函数 2.4 版本出现的

def outer(func):

    def inner(age):

        if age < 0:

            age = 0

        func(age)

    return inner

@outer

def say(age):

    print("Mark is %d years old" % age)


# 未使用 @outer

say = outer(say)

say(-10)  # 0


# 加入 @outer 后 say(-10) 等价于上面两行代码

say(-10)  # 0

装饰器2.4

def outer(func):

    def inner(*args, **kwargs):

        print("Be different")

        func(*args, **kwargs)

    return inner


# 使用@符号将装饰器应用到函数

@outer

def say(name, age):

    print("I'm %s,I'm %d years old" % (name, age))


# 未使用 @outer

say = outer(say)

say("Mark", 18)

# 加入 @outer 后 say("Mark", 18) 等价于上面两行代码

say("Mark", 18)

偏函数3

# 偏函数:把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单

import functools


# 转换大量的二进制字符串时

print(int("1010", base=2))  # 10


def f(s, base=2):

    return int(s, base)

print(f("1010"))


# 与 10 求和

def _sum(a, b=10):

    print(a+b)

_sum(1)  # 11


# 把一个函数固定住,形成一个新的函数

f = functools.partial(int, base=2)

print(f("1010"))

模块

1

模块简介

概述:

目前代码比较少,写在一个文件中还体现不出什么缺点,但是随着代码量越来越多,代码就越来越难以维护。为了解决难以维护的问题,我们把很多相似功能的函数分组,分别放到不同的文件中取,这样每个文件所包含的内容相对较少,而且对于每一个文件的大致功能可以用文件名来体现。很多编程语言都是这么来组织结构的,一个.py文件就是一个模块。

优点:

1.提高了代码的可维护性

2.提高了代码的复用度,当一个模块完毕,可以被多个地方引用

3.引用其他的模块(内置模块、第三方模块、自定义模块)

4.避免函数名和变量名的冲突

2

常用操作

导入内置模块1

# 导入内置模块

import sys


"""

Python 本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用

sys模块有一个argv变量,用list存储了命令行的所有参数

argv至少有一个元素,因为第一个参数永远是该.py文件的名称

"""

# sys.argv 是一个包含命令行参数的列表

print(sys.argv)

# 自动查找所需模块的路径的列表

print(sys.path)

自定义模块2

# 一个 _module2.py 文件就是一个模块


def div(a, b):

    c = a / b

    print(c)


def add(a, b):

    c = a + b

    print(c)


def mul(a, b):

    c = a * b

    print(c)


def sub(a, b):

    c = a - b

    print(c)

导入自定义模块3.1

# 引入模块  import module1[, module2, module3, module4]


import day06_moudle._module2

day06_moudle._module2.add(1, 2)  # 3

导入自定义模块3.2

# from ... import语句 作用:从模块中导入一个指定的部分到当前命名空间

from day06_moudle._module2 import add, div

# 注意:程序内容的函数可以将模块中的同名函数覆盖

add(1, 2)  # 3


def add(a, b):
    print(a+b+10)

add(1, 2)  # 13


div(4, 2)  # 2.0

导入自定义模块3.3

# 第三种最好不要多用,原因:程序内容的函数可以将模块中的同名函数覆盖

from day06_moudle._module2 import *      

add(1, 2)

div(4, 2)

OS模块介绍4.1

import os  # os 包含了普遍的操作系统


# 获取操作系统类型  nt-> windows  posix->Linux  Unix 或 Mac OS X

print(os.name)  # nt


# 打印操作系统的信息(windows不支持)

print(os.uname())


# 获取操作系统中的所有环境变量

print(os.environ)


# 获取指定环境变量

print(os.environ.get("PATH"))


# 获取当前目录

print(os.curdir)        # 以 . 表示当前


# 获取当前工作目录,即当前 python 脚本所在的目录

print(os.getcwd())


# 以列表的形式返回指定目录下的所有文件

print(os.listdir(r"C:\Users\Mark\PycharmProjects\Python"))


# 在当前目录下创建新目录

os.mk dir("mark")

# 删除目录

os.rm dir("mark")

# 获取文件属性

print(os.stat("file"))

# 重命名

os.rename("Mark", "Iu")

# 删除普通文件

os.remove("file1.text")   加文件后缀


# 运行shell命令

OS模块4.2

# 运行shell命令

import os

os.system("notepad")   # 运行记事本

# 终止记事本运行进程

os.system("taskkill /f /im notepad.exe")   

os.system("write")     # 运行写字本

os.system("mspaint")   # 运行画板

os.system("msconfig")  # 运行系统配置

# 16分钟后关闭计算机

os.system("shutdown -s -t 1000")

os.system("shutdown -a")  # 取消关闭计算机

OS.PATH 介绍4.3

# 有些方法存在于 os 模块里,还有些存在于 os.path 中


# 查看当前的绝对路径

print(os.path.abspath("./file"))

# 拼接路径

p1 = r"C:\Users\Mark\PycharmProjects\Python\test.py"    # p1结束可以有斜杠 \\

# 注意:参数2里开始不要有斜杠

p2 = "Mark\Iu"

print(os.path.join(p1, p2))

# 拆分路径

print(os.path.split(p1))

# 获取扩展名

print(os.path.splitext(p1))

# 判断是否是目录

print(os.path.isdir(p1))

# 判断文件是否存在

print(os.path.isfile(p1))

# 判断目录是否存在

print(os.path.exists(p1))

# 获得文件大小(字节)

print(os.path.getsize(p1))

# 文件的目录

print(os.path.dirname(p1))

# 文件的名字

print(os.path.basename(p1))

写在后面

最后给大家推送波福利!!!如果你打算入手或着正在学习Python,欢迎加入我们一起学习。后台回复「Python」,获取到你想要的资源。同时我们组建了一个Python技术学习群,里面大佬与小白都有,有很好的学习氛围。想要进群学习的,加 Mark 微信「IMark950831」,备注「加群」,期待你的到来!

好了,今天的分享就到这了,觉得写得不错的,点赞转发支持下。

点赞、转发是一种态度。

原文发布于微信公众号 - Python梦工厂(AzMark950831)

原文发表时间:2018-06-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java工会

十个常用的java正则表达式

2035
来自专栏Crossin的编程教室

【我问 Crossin】python程序一闪而过,是我的打开方式不对?

除了在公众号、交流群组或论坛上提问,大家有想问的问题也可以直接在本栏目文章下留言,接受以下提问: 与编程相关的问题 工作咨询、学习方向建议 程序猿的日常 Cro...

2829
来自专栏编程

Python教程2

前言 有关标准对象和模块的说明,请参阅Python标准库(https://docs.python.org/3/library/index.html#librar...

1709
来自专栏从零开始学自动化测试

python笔记32-ddt框架报告优化

至于什么是ddt这个可以参考我之前写的博客内容,使用ddt框架的时候,有个问题困扰我很久了,一直没得到解决(也有很大小伙伴问过我,没解决抱歉了!) 这个问题就是...

1314
来自专栏xdecode

Java读取打印机自定义纸张.

打印出现截断? 对于自定义纸张打印, 一定要先在打印机配置那边添加, 不然会出现截断. 例如打印1000*500, 出来是正常的, 打印216*139, 出现了...

24510
来自专栏杨建荣的学习笔记

从sysbench中学习Lua

我做事喜欢结果导向,喜欢快速迭代,能10分钟搞定,绝对不愿意花15分钟。但是技术行当,还是得耐得住寂寞,因为很多事情10分钟搞不定,可能100分钟,100...

2695
来自专栏思考的代码世界

Python网络数据采集之数据清洗|第06天

1093
来自专栏Crossin的编程教室

【Python 第30课】 字符串的索引和切片

前两天承蒙MacTalk池建强老师的推荐,让我们的学习队伍进一步壮大了。很多同学用的是Mac系统,而我是Linux党,很多Mac上的问题我没法帮忙解决。建议关注...

3307
来自专栏十月梦想

node通过路由获取不同用户信息

具体功能:使用不同url判断是老师或者学生,老师的工号4-6位,学生学号8-10位,否则提示学号不正确,

644
来自专栏玄魂工作室

Hacker基础之Python篇:一、环境安装和基础知识

0x01. 前言 emmmmmmm...你只需知道这是一门用途很广的语言,上到大数据AI,下到Linux运维,都可以使用Python,当然,黑客也用Pyth...

2596

扫码关注云+社区