壹拾陆

模块基础

一、模块的四种形式

1.1 什么是模块

? 模块是一系列功能的集合体,因为函数是某一功能的集合体,所以模块可以看作是一系列函数的集合体。

? 一个文件内部有很多的函数,因此一个文件就可以看成是一个模块。

? 一个python文件的名称为XXX.py,那么模块的名称就是XXX。

1.2 模块的四种形式

  1. 自定义模块:自己用python写一个有一定功能的文件,就可以称为一个自定义模块。
  2. 第三方模块:已经有别人写好的一定功能的模块,使用需要自己安装,目前已有13w+的第三方模块了。
  3. 内置模块:python解释器自带的模块。
  4. 包:把一系列模块组合到一起的晚间,文件夹内有__inti__文件。

1.3 为什么用模块

? python模块库一开放性的库,大家都可以上传不同功能的模块,直接使用现成的模块,提高开发效率。

1.4 如何使用模块

? 一般是使用import和from...import...导入模块。

二、import和from...import

2.1 import

? import首次导入会先以模块为准创造一个模块的名称空间,在执行模块对应的文件,将执行过程中产生的名字都放入模块的名称空间,最后在当前执行文件中拿到一个模块名。

? 模块重复导入时,会直接使用之前创造好的结果,不会再重复执行文件,导入多个模块的话,使用逗号分隔开。

2.2 from...import

? from...import首次导入会先以模块为准创造一个模块的名称空间,在执行模块对应的文件,将执行过程中产生的名字都放入模块的名称空间,在当前执行文件的名称空间中拿到一个名字,该名字直接指向模块中的某一个名字,意味着可以不用加任何前缀而直接使用。

? 使用from...import时,不用加前缀,代码简洁,但是容易与当前执行文件中名称空间中的名字产生冲突。

2.3 异同

? 相同点:1.两者都会执行模块对应的文件,两者都会产生模块的名称空间。2.两者调用功能时,需要跑到定义时寻找作用域关系,与调用位置无关

? 不同点:import需要加前缀;from...import...不需要加前缀

三、循环导入问题

? 再使用模块相互导入的时候,容易产生循环导入,致使无法导入,从而报错,例如:

# m1.py
print('from m1.py')
from m2 import x

y = 'm1'
  1. 创建m2的名称空间
  2. 执行m2.py,将执行产生的名字丢到m2.py
  3. 在当前执行文件中拿到m2.x
# m2.py
print('from m2.py')
from m1 import y

x = 'm2'
  1. 创建m1的名称空间
  2. 执行m1.py,将执行产生的名字丢到m1.py
  3. 在当前执行文件中拿到m1.y
# run.py
import m1
  1. 创建m1的名称空间
  2. 执行m1.py,将执行产生的名字丢到m1.py
  3. 在当前执行文件中拿到m1

    如果运行run.py,则会报错ImportError: cannot import name ‘y‘

    如果运行m1.py,则会报错ImportError: cannot import name ‘x‘

    如果运行m2.py,则会报错ImportError: cannot import name ‘y‘

? 解决方案

? 我们可以使用函数定义阶段只识别语法的特性解决循环导入的问题,我们也可以从本质上解决循环导入的问题,但是最好的解决方法是不要出现循环导入。

# m1.py
print('from m1.py')

y = 'm1'
from m2 import x
# m2.py
print('from m2.py')

x = 'm2'
from m1 import y

四、模块的搜索路径

4.1 搜索模块路径的方法

? 模块其实就是一个文件,如果要执行文件,首先就需要找到模块的路径(某个文件夹)。如果模块的文件路径和执行文件不在同一个文件目录下,我们就需要指定模块的路径。

  1. 先从内存中已经导入的模块中寻找
  2. 内置的模块中找
  3. 环境变量中找

4.2 搜索路径以执行文件为准

五、random模块

import random
print(random.random()) #大于0小于1的小数
0.03833739951277726
import random
print(random.randint(1,5))#[1,5]的整数
2
import random
print(random.rangrage(1,5))#(1,5)的整数
3
import random
print(random.uniform(1,3))#(1,3)小数
2.13548941567856
import random
print(random.choice([1,'32',[5,6]])#列表内的任意一个元素
1
import random
print(random.sample([1,'32',[5,6]])
['23', 1]
lis = [1, 3, 5, 7, 9]
# 打乱l的顺序,相当于"洗牌"
random.shuffle(lis)
print(lis)
[9, 1, 5, 7, 3]

原文地址:https://www.cnblogs.com/tangceng/p/11366068.html

时间: 2024-11-08 06:38:56

壹拾陆的相关文章

【壹拾壹周】final分数分配

组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块NEO 发布时间:12.3 武志远 武志远 武志远 武志远 武志远 宫成荣 宫成荣 杨柳 宫成荣 宫成荣 李峤 杨柳 李峤 谢孝淼 谢孝淼 谢孝淼 李峤 谢孝淼 杨柳 杨柳 杨柳 谢孝淼 宫成荣 李峤 李峤 评分规则参见B-1分数规则,与B-1规则相同,http://www.cnblogs.com/Boxer1994/p/6039442.html. 每名同学占比:武志远:0.26,杨柳:0.20,宫成

【壹拾壹周】评价

礼物挑选小工具: 优点:ui比之前好一些,好像礼物比之前更多了. 缺点:系统是根据用户选择的信息进行推荐的,而这个选择信息太少了,还需进一步细化,比如大家的女朋友都在18-22岁之间,价格区间都是几百块钱,那么如果很多人使用,礼物推荐重复的几率太大了. 食物链教学: 优点:比之前改进了一些微小的地方,比如控制面板默认不出现在屏幕中间,而是右边,这样就不会影响之后相关的操作了. 缺点:新增添的生物是不能进行自动连线的,当然这不是问题,设计就是这样的.但是除了这一点,原生生物跟后加入生物还有个不同,

【壹拾壹周】final_review

项目名:俄罗斯方块 组名:新蜂 组长:武志远 组员:宫成荣 杨柳 谢孝淼 李桥 final Review会议 时间:2016.12.3 会议内容 设想和目标 1.在final阶段发布时的预期目标是什么,期望实现那些功能,具体的实施程度如何? 预期目标:给用户一个surprise,让用户感到excited.final发布与之前的beta相比增加了很多功能,增加了三个功能键,分别是方块瞬间下落,瞄准系统,作弊系统.完善了等级系统. 这些功能大部分被良好的实现了,除了数据库排名系统,本来计划是搞一个全

壹拾贰

函数基础 一.可变长函数 ? 可变长参数:函数在调用时,传入的参数个数不固定 ? 调用函数时,传值有两种方式,一种是位置实参,另一种是关键字实参,因此形参接受传值也需要有两种方法,接收溢出传值的两种方式为位置实参(*)和关键字实参(**). 1.1 可变长形参(*) ? 形参中的 * 会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给 * 后的参数.需要注意的是:* 后的参数名约定俗成为args. def sum_self(*args): res = 0 for num in ar

壹拾伍

函数进阶 一.递归 ? 函数的递归调用,是一种特殊的嵌套调用,但是在调用一个函数的过程中,直接或者间接的调用了他自身. ? 递归的核心: 递进的时候能够达到一个结果,问题规模越来越小(不一定要真正的达到). ? 递归函数不断地调用自身,就会很肯能会进入无限调用的死循环.同样是死循环,while循环就会进行下去,而递归调用就会在解释器设定的最大范围停止并报错"超出范围".这是因为while循环的每次循环都只存在一个内存空间,而递归则是每一次都开辟一个新的空间,旧的空间不消失,这样就会占用

壹拾柒

Python常用模块 一.包 1.1 什么是包 ? 包是一种形式,本质就是一个含有.py文件的文件夹. 1.2 为什么使用包 ? 模块的第一个版本只有10个功能,但是未来在扩展版本的时候,模块名和用法应该最好不要去修改,但是这只是对使用者友好,而由于版本扩展,文件越来越大,模块设计者对模块的管理.维护会越来越复杂,因此我们可以使用包来扩展模块的功能. 1.3 如何使用包 1.3.1 模块和包 ? 导入模块发生的三件事: 创建一个包的名称空间 执行py文件,将执行过程中产生的名字存放于名称空间中.

肆拾陆 ---django视图层与模板层

django视图层与模板层 一.视图层 1.1 HttpResponse.render.redirect ? HttpResponse:返回字符串: ? redirect:重定向 ? render:返回一个html页面,也可以给模板传值 ? render的逻辑原理: from django.template import Template,Context def index(request): res = Template('<h1>{{ user }} </h1>') con =

土办法解决日期转换问题,转出格式为。。。 贰零壹陆年零壹月零捌日

/** * 参数名称:@param dateStr 待转换的日期(String格式,结构为yyyy-MM-dd) * 返回值:String 小写汉字的日期 * 方法描述:土办法解决日期转换问题,转出格式为... 贰零壹陆年零壹月零捌日 * @author:zhouzhiwei * 创建时间:2014-5-23 下午05:59:20 */ public static String stringToChineseSmallRMB(String dateStr) { // 传参数的格式为 2011-1

大写中文数字-財务

壹.贰.叁.肆.伍.陆.柒.捌.玖.拾.佰.仟.万.亿.元(圆).角.分.零.整.这是大家常常要填写的大写数字,问什么要用大写数字呢?想必非常多人都不是非常清楚! 先看看下面两个有关大写数字的表格: 1.数码与大.小写数字的对比表: 数码 小写数字 大写数字 0 ○ 零 1 一 壹 2 二 贰 3 三 叁/參 4 四 肆 5 五 伍 6 六 陆 7 七 柒 8 八 捌 9 九 玖 2.进位数码与大.小写数字的对比表 数码 小写数字 大写数字 10 十 拾 20 二十 廿 30 三十 卅 100