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 条评论
登录 后参与评论

相关文章

来自专栏JetpropelledSnake

Linux学习笔记之Redis中5种数据结构的使用场景介绍

原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码。目前目标是吃透 redis 的数据结构。我们都知...

1041
来自专栏北京马哥教育

Python入门教程:超详细1小时学会Python

1.Hello world 安装完Python之后,打开IDLE(Python GUI) ,该程序是Python语言解释器,你写的语句能够立即运行。 我们写下...

4235
来自专栏java一日一条

java提高篇之异常(上)

在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失。同样的道理,计算机的世界也是不完美的,...

732
来自专栏idealclover的填坑日常

C++ cin清理缓冲区

C++在用cin做输入的时候,尤其是需要输入int型值的时候,往往需要做验证与处理。而对于异常值,则需要先清理缓冲区,再准备下一次输入。

672
来自专栏FreeBuf

逆向工厂(二):静态分析技术

* 本文原创作者:追影人,本文属FreeBuf原创奖励计划,未经许可禁止转载 前言 [逆向工厂]第一章节中介绍了逆向技术的相关基础知识,其中提到逆向的两种形式:...

3248
来自专栏有趣的django

1.python简介

简介 1、python语言介绍 python的创始人:Guido Van Rossum 2、python是一门什么样的语言 编程语言主要从以下几个角度进行分类:...

3365
来自专栏小灰灰

动手实现MVC: 3. AOP实现准备篇动态代理

背景 在实现AOP功能时,必然扰不开代理模式,所以在此之前,先准备下代理模式相关知识点 代理 关于代理,主要需要注意以下几个点 什么是代理模式 为什么要用代理 ...

1707
来自专栏CSDN技术头条

知名互联网公司 Java 开发岗面试知识点解析

互联网公司的校园招聘,从形式上说,面试一般分为 2-3 轮技术面试 +1 轮 HR 面试。

1162
来自专栏程序员阿凯

JDK10 揭秘

1405
来自专栏小李刀刀的专栏

Laravel 5.4 及 5.5 中的全新字符串辅助方法

Laravel 5.5 已经确定预计在 2017年 Laravel 欧洲大会上正式发布。这次重大升级,也带来了一些新的字符串相关的辅助方法。 以下介绍一些最近比...

3357

扫码关注云+社区