这节中,我突然发现Python其实是自带编辑器的,所以为什么我还去下了notepad++啊……
文章目录
1.Python编辑器
由于不满足于每次打开Python都要重新写一遍所有代码,我决定将所有代码保存下来,把一些可以重复利用的部分写成函数的形式,保存成.py文件,为了顺便练习一下很久没有练过的基本逻辑结构,在notepad++中,我写下了如下代码并保存为.py格式:
def goldbach(num):
if num==4:
print('4=2+2')
else:
a=3
while not(isPrime(a) and isPrime(num-a)):
a=a+2
print(num,'=',a,'+',num-a)
print()
return
def isPrime(a):
i=3
while i<=a/2:
if a%i==0:
return False
else:
i=i+2
return True
(goldbach是一个接受一个偶数作为输入并且’打印出该偶数是如何被拆分成两个质数之和’的函数,这里没有做严格的输入检查).
由于这段代码其实并没有做到一遍通过(原因是我把取反写成’~‘了,后来又换成’!’,发现都不对,查了帮助发现python的取反应该是’not’),因此我需要再次打开该文件进行编辑,一般需要编辑纯文本的时候都会在该文件上右击选择文本编辑器打开,这里,如果之前安装配置正确的话,右击后将看到如下图所示的菜单:
这里可以看到,右键菜单中提供了一个edit with idle的选项,点选该项并使用python IDLE编辑,可以看到如下界面:
可以看到,它同样具有文本编辑器的功能,而且支持直接调试(Run),虽然notepad++也可以通过插件来做到编辑完.py文件直接开始调试,但我没有做相关设置,这里直接选择Run菜单中的Python Shell,尝试输入goldbach(634)
进行测试,如下图:
至此我们已经尝试了使用python自带的编辑器进行编辑并在编辑完成后进行了简单的测试.
2.导入py文件
2.1.源目录下编辑并导入py文件
可以看到之前的测试是十分失败的,又出现了报错信息:goldbach未定义.事实上我们已经定义了goldbach这个函数,只是这个函数没有被找到.考虑到应该不是类似于工作路径设置之类的问题(我们直接从这个文件出发,打开了python shell,那么路径多半是正确的),那么很大可能是python需要知道这个路径下哪个文件中定义了该函数,类似于C语言中的include,在Python中我们使用import来指明函数的定义来源于哪个文件,例如我们需要在Python Shell中输入如下语句(这里goldbach是文件名)
import goldbach
goldbach.goldbach(634)
就可以得到预期的结果,这里需要注意,除了需要import相应的.py文件之外,还要在使用中指明我们的函数到底是哪个文件中定义的,例如上述情况中,我在同路径(同文件夹)下创建了joke.py文件,其内容如下(稍后会解释同路径为何加粗):
def goldbach(num):
print('我也不知道怎么拆,这是个玩笑')
之后我们在Python Shell中输入:
import joke
import goldbach
joke.goldbach(634)
以及输入:
import joke
import goldbach
goldbach.goldbach(634)
将能够得到不同的输出,因此需要强调goldbach这一名称到底来自于哪里,有一点类似于’域’的概念.
2.2.导入其它路径下的py文件
在上述例子中,假如我们并非在编辑python文件完成后点击Run来启动Python Shell,而是通过其它方式来启动Python Shell,那么有一定可能会在import的过程中报错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'goldbach'
其实这个报错信息并不准确,我们计算机中确实在某一位置存在一个叫做’goldbach.py’的文件,只是这个文件不在Python默认的检测范围之内,对于这个问题,只要将其添加到Python检测路径中就好了,请参考该博客,将文件所在路径写入到一个.pth文件中,并将此.pth文件保存到Python安装路径\Lib\site-packages
下,你也可以直接将重要的.py文件放到此位置,但会造成安装目录下文件数量过于庞大且不便管理,其它帮助信息可以查看此目录下的readme文件.
2.3.导入模块的一部分内容
对于过分庞杂的模块,往往只需要导入其中的一部分,这时可以使用from ... import ...
,例如在test.py文件中有如下语句
def demo1(num):
return num*num
def demo2(num):
return 1/num
那么使用from test import demo1
语句将仅导入demo1函数,在python shell中可以直接使用demo1(...)
调用(而非test.demo1
),demo2函数未被导入并且无法调用.
2.4.import … as …
使用import ... as ...
来导入文件名过长的包以便在接下来保持代码简洁,例如需要导入whatADamnLongNameItIsIHateSuchHorribleFileNames.py文件中的所有内容,并在接下来使用其中的demo函数,那么可以使用命令
import whatADamnLongNameItIsIHateSuchHorribleFileNames as horribleName
horribleName.demo
来完成,而无需使用超级长的文件名.
值得注意的是import ... as ...
相当于赋予文件缩略名,当先后赋予两个不同文件以相同缩略名时,前一个文件将被顶替,赋予同一个文件以不同的缩略名时,所有缩略名均可以使用.
3.将py文件作为模块运行
使用Python自带编辑器进行编辑并在Run菜单下选择Run Module可以直接将py文件作为模块运行,此时无需重新导入该文件,而且不需要指明此文件中的函数的源文件名.例如文件joke.py中有名为joke1的函数,那么如果joke.py已经作为模块被运行那么只需要在shell中使用joke1就可以执行对应的函数(而无需使用joke.joke1).
作为模块运行的文件中的语句将全部被执行.例如在一个py文件的末尾写有如下语句:
print('已导入')
那么在选择Run Module之后可以看到此语句将被执行(而无需使用import命令).