python导入模块--案例

1 导入模块

1.1 问题

本案例要求先编写一个star模块,主要要求如下:

  • 建立工作目录 ~/bin/
  • 创建模块文件 ~/bin/star.py
  • 模块中创建pstar函数,实现打印50个星号的功能

然后练习导入模块,调用模块中的函数:

  • 在交互解释器中导入模块
  • 调用模块的函数

1.2 方案

使用vim当作文本编辑器编写python脚本,使用RHEL6系统中自带的python解释器加载模块。

注意,模块及函数在后续课程中有详细介绍,这里只是因为经常要用到导入模块,所以需要大致了解一下。

模块支持从逻辑上组织python代码。当代码量变得相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互。

这些代码段是共享的,所以python允许调入一个模块,允许使用其他模块的属性来利用之前的工作成果,实现代码重用。这个把其他模块中属性附加到你的模块中的操作叫做导入(import)。

给定一个模块名之后,只可能有一个模块被导入到python解释器中,所以在不同模块间不会出现名称交叉现象;每个模块都定义了它自己的唯一的名称空间,访问一个模块的属性可以使用句点表示法,比访问star模块中的pstar函数的写法为:star.pstar()。

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:创建目录结构

Linux在执行命令时,它会到PATH环境变量定义的路径中去查找,如果查到则执行,如果查不到则提示命令找不到。

为了使得编写的脚本在任意位置可以直接执行,并支持按TAB键补齐,最好将命令放到PATH环境变量定义的路径中。

在Linux系统中,每个用户的家目录下的bin目录,默认在PATH环境变量中,但是系统默认并没有创建该目录。

  1. [root@py01 ~]# echo $PATH
  2. /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin

2)根据PATH变量内容创建bin目录

  1. [root@py01 ~]# mkdir /root/bin

步骤二:创建模块文件

1)创建模块文件

python的模块名就是脚本文件名去掉.py的扩展名,所以star模块的文件名就是star.py。

在创建文件时,不要使用python已有的模块名。因为在import模块时,如果自己创建的模块文件和python自带的模块重名,那么,用户自己创建的模块将被导入,用户也就无法使用python自身的模块了。

判断python是否拥有某个模块,最简单的办法就是,进入到python交互解释器中,然后执行import命令,如果提示ImportError则表示python默认没有该模块。

  1. [root@py01 ~]# cd bin
  2. [root@py01 ~]# vim star.py

2)编写pstar函数

像shell本一样,python脚本文件的第一行也是解释器。

在python中,使用def定义函数,def后面紧跟函数名,函数名后面是一对圆括号,圆括号包含可选的参数。

需要注意的是,()并不是函数名的一部分,另外最后不要丢掉冒号。在python中,如果一个关键字后面有子语句块,那么该关键字的行尾都需要加冒号。

函数体部分(代码组)必须缩进,一般缩进4个空格,而且所有的子语句必须缩进相同的空白。

函数定义只是说有这样的功能,并不执行。所以该程序文件如果直接以脚本的方式执行,那么它不会产生任何输出。

  1. #!/usr/bin/env python
  2. def pstar():
  3. print '*' * 50

步骤三:导入模块并测试

在这里需要注意的是,需要在模块文件所在的目录下打开交互解释器。因为python在导入模块时会在固定的几个位置去搜索模块,如果找到则导入,否则将出错。当前的工作目录也是python在搜索模块时会查找的路径。

  1. [root@py01 bin]# python
  2. Python 2.6.6 (r266:84292, Oct 12 2012, 14:23:48)
  3. [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>> import star

解释器需要知识执行的是哪个模块中的函数,所以写法应该是:“模块.函数”。

注意,函数名后面的圆括号不要丢掉,python调用函数使用圆括号,表示执行该函数的意思。如果没有圆括号,只是引用,不调用,也就是不会执行该函数。

  1. >>> star.pstar()
  2. **************************************************

转载于:https://www.cnblogs.com/fanfanfanlichun/p/8723450.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css常用命名

常用的CSS命名 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体佈局宽度:wrapper 左右中:left right center 登录条:l…

***关于WP的邮件无法发送问题的总结(原创)

1.用FTP打开 /wp-include/class-smtp.php ,最好是下载下来,搜索一下,查找到如下的代码: $this->smtp_conn stream_socket_client($host . ":" . $port,$errno,$errstr,$timeout,STREAM_CLIENT_CONNECT,$socket_cont…

C# 简单方式运行powershell文件/使用cmd命令运行ps1

一、目的、构想 1.C# winfrom编译的tool 运行一个powershell文件。 2.只需要运行即可,不需要返回值。 3.网上部分资料需要额外添加dll。 3.已经有cmd执行命令的函数,能否直接在cmd运行? 4.在cmd黑色窗口输入powershell 能进入powershell…

​.Net 7 AOT 彻底解析下(完结篇)

楔子:本篇是承继前面三篇文章而来,分别为:.Net 7 的 AOT 和 CLR有什么区别?.Net 7 的 R2R,Crossgen2是什么?.Net 7 的AOT原理简析通过以上三篇的基础,本篇来彻底解析下AOT这门技术的底层原理。AOT此终,不再…

cmd暂停快捷键_是否有键盘快捷键可以暂停正在运行的CMD窗口的输出?

cmd暂停快捷键When running a batch script, you may need or want to pause the output in the CMD window so that you can look things over. Is there an easy way to pause, then restart the output? Today’s SuperUser Q&A post has the answer to help with a re…

bash快捷键

Ctrl h :回退一个字符Ctrl f :光标前进一个字符Ctrl b :光标后退一个字符Ctrl w :删除光标之前的一个字符串(进入剪切板)Ctrl u :删除光标前的所有字符 (进入剪切板&#xff09…

J - 青蛙的约会(扩展欧几里得)

https://vjudge.net/contest/218366#problem/J 第一步追及公式要写对:ynk-(xmk)pL > (n-m)klpx-y 可以看出扩展欧几里得原型,这里注意扩展欧几里得求出的是任意解,非最优,要推出最小解k。 (n-m)xlygcd > (n-m)(x*(x-y)/gcd)…

C# 简单方式解压Zip文件/使用VS2019自带功能

一、目的、构想 1.直接解压zip文档。 2.网上资料不少需要外部dll。 3. 找到可以不需要外部dll方法,分享。 二、code实现 using System.IO.Compression;string filePath "c:\Server\fileList"; string zipPath "C:\Server\Download\Auto.zip&quo…

在 Docker 中使用 flannel - 每天5分钟玩转 Docker 容器技术(60)

上一节我们安装和配置了 flannel,本节在 Docker 中使用 flannel。配置 Docker 连接 flannel编辑 host1 的 Docker 配置文件 /etc/systemd/system/docker.service,设置 --bip 和 --mtu。这两个参数的值必须与 /run/flannel/subnet.env 中 FLANNEL_SUBNET …

使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例

译者注本文是一篇不可多得的好文,MemoryPack 的作者 neuecc 大佬通过本文解释了他是如何将序列化程序性能提升到极致的;其中从很多方面(可变长度、字符串、集合等)解释了一些性能优化的技巧,值得每一个开发人员学习,特别是框架的开…

永不丢失照片:防弹照片备份的完整指南

There’s nothing as precious and irreplaceable as your personal photos and, with a little forethought and planning, there’s no reason to ever feel the heartbreak of losing even a single one of them to theft, broken devices, or disaster. 没有比您的个人照片…

C# 检查当前系统已安装的程序app/两种方法检测

一、目的、构思 1.检测当前系统有没有安装某个程序,如果没有就重新安装。 2.在网上找到了两种方法,可惜都找不到需要检测的app。 二、code实现 1.查找注册列表方式。要在winform的project使用,在console project 貌似找不到Microsoft.Win3…

Integer源码解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangyangzhizhou/article/details/77196626 概况 Java的Integer类主要的作用就是对基本类型int进行封装,提供了一些处理int类型的方法,比如int到Strin…

MySQL InnoDB存储引擎

呵呵哒。。。 MySQL体系结构和存储引擎 首先要搞懂的是什么是数据库,什么是数据库实例。 数据库:物理操作系统文件或其他形式文件类型的集合。 实例:MySQL数据库由后台线程以及一个共享内存区组成,实例才是真正对数据库进行操作的…

Blazor学习之旅 (8) MudBlazor组件库介绍

【Blazor】| 总结/Edison Zhou大家好,我是Edison。为了实现一个Web应用系统,需要有个看起来不丑的UI,而对于.NET程序员来说要做全栈开发还是有点难,而本篇介绍的这个UI组件库正好可以帮助我们解决这个问题!MudBlaozr是…

棉花糖多少钱_如何在6.0棉花糖及更高版本中访问Android的正在运行的应用程序列表...

棉花糖多少钱In Android 5.x and below, accessing your list of running apps was simple—you’d jump into Settings > Apps > Running. Easy! In Android 6.0, however, Google moved this setting. It’s still not super difficult to find, but it’s a little tr…

IE不能直接顯示PDF的原因分析和解決方法

>>>>>問題<<<<<因為有系統用iframe顯示PDF&#xff0c;但PDF有時卻并不能順利地在流覽器中顯示&#xff0c;而是跳出下載對話框&#xff0c;要求下載&#xff0c;給user帶來很多困擾&#xff0c;也給我們系統維護人員帶來了麻煩&#xff0c;用了…

C# 程序图标设置/winform 图标

一、目的、实际情况 1.编写一个winform 程序&#xff0c;发现有一个图标非常有意义。区分其他程序&#xff0c;以及感觉在做产品而不是写代码。 2.添加图标图片发现&#xff0c;需要用ico格式。在线转换&#xff08;某度搜索&#xff09;还是不靠谱。要微信登陆&#xff0c;登…

数字化转型,究竟在“转”什么?

这是头哥侃码的第265篇原创「头哥唠B唠」这个栏目已经持续了几个月了&#xff0c;没想到还在继续进行&#xff0c;并收获了很多朋友们的喜爱。非常感谢大家的支持&#xff01;在上次的直播中&#xff0c;我找来了我的老熟人们。一个是右军老师&#xff0c;之前 APISIX 的很多内…

C++ Primer 第Ⅲ部分笔记——类设计者的工具

1.对象移动 1.1右值引用 右值引用区别于普通引用&#xff0c;用两个&表示 返回左值引用的函数&#xff0c;连同赋值、下标、解引用和前置递增递减运算符返回左值 返回非引用的函数&#xff0c;连同算术、关系、位以及后置递增递减运算符都生成右值 我们不能将左值引用绑定到…