你怎么可以两个变量等于一个变量:
改成:
importsys
script,user_name=sys.argv,sys.argv
prompt=">"
print"Hi%sI'mthe%sscript"%(user_name,script)
print"I'dliketoaskyouafewquestions"
print"Doyoulikeme%s"%user_name
likes=raw_input(prompt)
print"wheredoyoulive%s"%user_name
lives=raw_input(prompt)
print"whatkindofcomputerdoyouhave?"
computer=raw_input(prompt)
print"""
Alright,soyousaid%raboutlikingme.youlivein%r
Notsurewherethatis.Andyouhavea%rcomputer.nice
"""%(likes,lives,computer)
⑵ 求帮忙简单解释一下这个python程序,急,在线等,谢谢了!
defo(s):#定义函数o()参数为s
l=len(s)#把s(也就是从程序入口传进来的参数)的长度值赋给l
returnlen(set([a+b+c
forainsforbinsforcins])
)==l*(l+1)*(l+2)//6
#return就是返回的意思,此处是返回布尔值(true/false)
#运算符符号==为比较两者是否相等,如果相等返回真,如果不不相等返回假
M=int(input())#将用户输入的值转化为整型并赋给M
N=3**M#将3的M次幂赋值给N
i=1#赋值语句
s=M*[i]#生成列表列表长度为M列表内容为M个i(也就是1)。
whilei:#当i不为0时程序始终在循环块内执行
ifs[i]-N:#判断语句如果列表中第i+1位的值与N相等则执行下列语句否则跳到最后一个else语句
s[i]=s[i]+1#将列表s的第i+1位的值增1
ifo(s[:i+1]):#调用自定义函数o(s)将列表前两位的值传如自定义函数中能得到该函数返回的bool值如果为真则往下执行否则跳出该if-else块
ifi<M-1:#如果M大于2则:
i=i+1#i增1
s[i]=s[i-1]#赋值
else:
N=s[-1]#N等于s列表最后一个的值
else:
i=i-1#赋值i减1,当i为0的时候跳出循环语句
print(N)#打印N的值
⑶ 这个python程序的入口在哪
可以自己定义入口(main)
在代码最后面加上
if__name__=='__main__':
M=Macro()#实例化类文件
M.ExecuteBlock()#调用类文件的方法
这个实际上类似于C 或者 java 的main()
假设这个文件叫做mac.py
命令行里执行
pythonmac.py
#就会执行if__name__=='__main__':下面的代码
⑷ python语言中有类似C语言或者java中程序执行时的入口方法main(),如果没有那么它是怎么执行的呢
没有,python是解释型的语言,
看见第一个可以被执行的语句就顺序执行。
比如
def abc(ab): #这是函数,没调用没执行。
print ab
ddd="abcdefg" #赋值语句,执行
print ddd #在标准输出上输出ddd的内容,执行
abc(ddd) 函数调用执行。
⑸ python 中的if __name__=='__main__': main()是什么 意思呢
一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。
if __name__ == '__main__'就相当于是 Python模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于__name__的值。
举例子说明一下,假设有一个 const.py 文件,内容如下:
PI = 3.14
def main():
print "PI:", PI
main()
(5)python程序入口参数扩展阅读
如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。实际上,这个问题还可以衍生出其他的一些知识点,例如__main__.py文件与 Python 的-m参数。
输出结果只列出了关键的部分,应该很容易看出他们之间的差异。直接运行是把 run.py 文件所在的目录放到了 sys.path 属性中。以模块方式运行是把你输入命令的目录(也就是当前工作路径),放到了 sys.path 属性中。
⑹ 【Python基础】python基本语法规则有哪些
1.关于编码:
默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:
# -*- coding: cp-1252 -*-
2.标识符:
第一个字符必须是字母表中字母或下划线,其他的部分由字母、数字和下划线组成。
标识符对大小写敏感。
在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。
3.保留字:
保留字即关键字,我们不能把它们用作任何标识符名称。
Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
代码:
import keyword
keyword.kwlist
结果:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
4.关于注释:
单行注释以 # 开头
多行注释可以用多个 # 号,还有 ''' 和 """
5.缩进与多行语句:
Python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠(\)来实现多行语句,例如:
代码:total = item_one + \
item_two + \
item_three
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(\),例如:
代码:total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']
6.数字(Number)类型:
Python中数字有四种类型:整数、布尔型、浮点数和复数。
int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
bool (布尔), 如 True。
float (浮点数), 如 1.23、3E-2
complex (复数), 如 1 + 2j、 1.1 + 2.2j
7.字符串:
python中单引号和双引号使用完全相同。
使用三引号('''或""")可以指定一个多行字符串。
转义符 '\'
反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r"this is a line with \n" 则\n会显示,并不是换行。
按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
字符串可以用 + 运算符连接在一起,用 * 运算符重复。
Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
Python中的字符串不能改变。
Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
字符串的截取的语法格式如下:变量[头下标:尾下标:步长]
代码示例:
#!/usr/bin/python3
str='Runoob'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print('hello\nrunoob') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
8.空行:
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
9.等待用户输入input:
执行下面的程序在按回车键后就会等待用户输入:
input("\n\n按下 enter 键后退出。")
以上代码中 ,"\n\n"在结果输出前会输出两个新的空行。一旦用户按下 enter 键时,程序将退出。
10.同一行显示多条语句:
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例:
import sys; x = 'runoob'; sys.stdout.write(x + '\n')
11.代码组:
缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。
12.Print输出:
Print 输出
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="":
代码:
x="a"
y="b"
# 换行输出
print( x )
print( y )
# 不换行输出
print( x, end=" " )
print( y, end=" " )
13.import 与 from...import
在 python 用 import 或者 from...import 来导入相应的模块。
将整个模块(somemole)导入,格式为: import somemole
从某个模块中导入某个函数,格式为: from somemole import somefunction
从某个模块中导入多个函数,格式为: from somemole import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemole import *
代码:
导入 sys 模块
import sys
print ('命令行参数为:')
for i in sys.argv:
print (i)
print ('\n python 路径为',sys.path)
导入 sys 模块的 argv,path 成员
from sys import argv,path # 导入特定的成员
print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path
14.命令行参数:
很多程序可以执行一些操作来查看一些基本信息,Python可以使用-h参数查看各参数帮助信息:
代码:
$ python -h
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser (also PYTHONDEBUG=x)
-E : ignore environment variables (such as PYTHONPATH)
-h : print this help message and exit
[ etc. ]
15.一个有用的函数:help( )
调用 python 的 help() 函数可以打印输出一个函数的文档字符串:
# 如下实例,查看 max 内置函数的参数列表和规范的文档
>>> help(max)
……显示帮助信息…… 按下 : q 两个按键即退出说明文档
如果仅仅想得到文档字符串:
>>> print(max.__doc__) # 注意,doc的前后分别是两个下划线
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more arguments, return the largest argument.
⑺ vscode如何调试python
初始化配置
配置在调试会话期间驱动VS Code的行为。 配置在launch.json文件中定义,该文件存储在工作区的.vscode文件夹中。
注意为了更改调试配置,您的代码必须存储在一个文件夹中。
要使用Python配置生成launch.json文件,请执行以下步骤:
1.选择设置按钮(在上图中圈出)或使用Debug> Open configurations菜单命令。
2.将从命令选项板打开配置菜单,允许您为打开的文件选择所需的调试配置类型。 现在,在出现的Select a debug configuration菜单中,选择Python File。
注意通过调试面板启动调试会话,F5或调试>启动调试,如果不存在配置,也会打开调试配置菜单。
然后,Python扩展创建并打开一个launch.json文件,该文件包含基于您之前选择的预定义配置,在本例中为Python文件。 您可以修改配置(例如,添加参数),还可以添加自定义配置。
更多的配置
默认情况下,VS Code仅显示Python扩展提供的最常见配置。 您可以使用列表和launch.json编辑器中显示的“添加配置”命令选择要包含在launch.json中的其他配置。 当您使用该命令时,VS Code会提示您所有可用配置的列表(请务必向下滚动以查看所有Python选项):
选择Node.js:Gulp任务会产生以下结果:
在调试过程中,状态栏显示左下方的当前配置; 右边是当前的调试解释器。 选择配置会显示一个列表,您可以从中选择不同的配置:
默认情况下,调试器使用与VS Code的其他功能相同的python.pythonPath工作空间设置。 要使用不同的解释器进行特定的调试,请在launch.json中为pythonPath设置适用的调试器配置,如下一节所述。 或者,选择状态栏上的命名解释器以选择另一个更新python.pythonPath。
设置配置选项
首次创建launch.json时,有两种标准配置在编辑器中的集成终端(VS代码内部)或外部终端(VS代码外部)中运行活动文件:
具体设置将在以下部分中介绍。 您还可以添加标准配置中未包含的其他设置,例如args。
name
提供VS Code下拉列表中显示的调试配置的名称。
type
标识要使用的调试器类型; 用于Python代码。
request
指定调试的模式
launch:指定调试起始文件program
attach:指定调试挂载进程
program
提供python程序的入口模块(启动文件)的完全限定路径。 值:${file}, 常用于默认配置,使用编辑器中当前活动的文件。 通过指定特定的启动文件,无论打开哪个文件,您始终可以确保使用相同的入口点启动程序。 例如:
"program": "/Users/Me/Projects/PokemonGo-Bot/pokemongo_bot/event_handlers/__init__.py",
您还可以依赖工作区根目录中的相对路径。 例如,如果是根“/Users/Me/Projects/PokemonGo-Bot”,你可以像这样使用
"program": "${workspaceFolder}/pokemongo_bot/event_handlers/__init__.py",
pythonPath
指向用于调试的Python解释器,它可以是包含Python解释器的文件夹。 该值可以使用变量${workspaceFolder}和${workspaceFolder}/.venv如果未指定,则此设置默认为在中标识的解释器python.pythonPath,
或者,您可以使用在每个平台上定义的自定义环境变量来包含要使用的Python解释器的完整路径,这样就不需要其他文件夹路径。
args
指定传递给Python程序的参数。 由空格分隔的参数字符串的每个元素都应包含在引号内,例如:
"args": ["--quiet", "--norepeat", "--port", "1593"],
stopOnEntry
设置为true的时候,打破正在调试的程序的第一行的调试器。 如果省略(默认值)或设置为false,调试器将程序运行到第一个断点。
console
指定程序输出的显示方式。
cwd
指定调试器的当前工作目录,该目录是代码中使用的任何相对路径的基本文件夹。 如果省略,则默认为${workspaceFolder}vscode的工作目录,作为一个例子${workspaceFolder}包含了python代码文件夹或者文件,包含了app.py
配置如下:
redirectOutput
省略或设置为时true(默认值),使调试器将程序的所有输出打印到VS Code调试输出窗口。 如果设置为false,程序输出不会显示在调试器输出窗口中。
使用时通常禁用此选项
"console": "integratedTerminal"
或
"console": "externalTerminal"
因为不需要在调试控制台中复制输出。
justMyCode
省略或设置为true(默认值),仅将调试限制为用户编写的代码。 调成false还可以调试标准库函数。
django
可以调试django框架
env
为调试器进程设置可选的环境变量,而不是调试器始终继承的系统环境变量。
envFile
包含环境变量定义的文件的可选路径。 请参阅配置Python环境 - 环境变量定义文件。
在代码中调用断点
在Python代码中,您可以调用断点 在调试会话期间要暂停调试器的任何位置。
断点验证
Python扩展自动检测在非可执行行上设置的断点,例如 通过 语句或多行语句的中间。 在这种情况下,运行调试器会将断点移动到最近的有效行,以确保代码执行在此时停止。
附加到本地脚本
在某些情况下,您需要调试由另一个进程在本地调用的Python脚本。 例如,您可能正在调试为特定处理作业运行不同Python脚本的Web服务器。 在这种情况下,您需要在启动后将VS Code调试器附加到脚本:
1.运行VS Code,打开包含脚本的文件夹或工作区,然后创建一个launch.json 对于该工作空间,如果尚不存在。
2.在脚本代码中,添加以下内容并保存文件:
3.使用终端打开终端:创建新的集成终端,激活脚本的选定环境。在终端中,使用python -m pip install --upgrade ptvsd安装ptvsd软件包。
4.在终端中,使用脚本启动Python,例如python3 myscript.py。 您应该看到代码中包含的“等待调试器附加”消息,并且脚本在ptvsd.wait_for_attach()调用时停止。
5.切换到Debug视图,从Debugger下拉列表中选择Python:Attach,然后启动调试器。
python学习网,免费的在线学习python平台,欢迎关注!
⑻ python怎么设置手机软件参数
app自动化(二)python代码操控手机终端
1.
在cmd命令输入(adb connect 本地地址:模拟器端口号)来连接模拟器,每个模拟器的默认端口号都不同,不懂的可以在网络查一下 adb connect 127.0.0.1:62001
2.
查看已连接设备列表,查看模拟器是否连接成功 adb devices
3.
查看被操控app的包名以及主程序入口:aapt mp badging app包的路径。
⑼ 在Python中定义Main函数
目录
许多编程语言都有一个特殊的函数,当操作系统开始运行程序时会自动执行该函数。这个函数通常被命名为main(),并且依据语言标准具有特定的返回类型和参数。另一方面,Python解释器从文件顶部开始执行脚本,并且没有自动执行的特殊函数。
尽管如此,为程序的执行定义一个起始点有助于理解程序是如何运行的。Python程序员提出了几种方式对此进行实现。
本文结束时,您将了解以下内容:
Python中的基本main()函数
一些Python脚本中,包含一个函数定义和一个条件语句,如下所示:
此代码中,包含一个main()函数,在程序执行时打印Hello World!。此外,还包含一个条件(或if)语句,用于检查__name__的值并将其与字符串"__main__"进行比较。当if语句为True时,Python解释器将执行main()函数。更多关于Python条件语句的信息可以由此获得。
这种代码模式在Python文件中非常常见,它将作为脚本执行并导入另一个模块。为了帮助理解这段代码的执行方式,首先需要了解Python解释器如何根据代码的执行方式设置__name__。
Python中的执行模式
Python解释器执行代码有两种方式:
更多内容可参考如何运行Python脚本。无论采用哪种方式,Python都会定义一个名为__name__的特殊变量,该变量包含一个字符串,其值取决于代码的使用方式。
本文将如下示例文件保存为execution_methods.py,以 探索 代码如何根据上下文改变行为:
在此文件中,定义了三个对print()函数的调用。前两个打印一些介绍性短语。第三个print()会先打印短语The value __name__ is,之后将使用Python内置的repr()函数打印出__name__变量。
在Python中,repr()函数将对象转化为供解释器读取的形式。上述示例通过使用repr()函数来强调__name__的值为字符串。更多关于repr()的内容可参考Python文档。
在本文中,您将随处可见文件(file),模块(mole)和脚本(script)这三个字眼。实际上,三者之间并无太大的差别。不过,在强调代码目的时,还是存在细微的差异:
“如何运行Python脚本”一文也讨论了三者的差别。
基于命令行执行
在这类方法中,Python脚本将通过命令行来执行。
执行脚本时,无法与Python解释器正在执行的代码交互。关于如何通过命令行执行代码的详细信息对本文而言并不重要,但您可以通过展开下框阅读更多有关Windows,Linux和macOS之间命令行差异的内容。
命令行环境
不同的操作系统在使用命令行执行代码时存在细微的差异。
在Linux和macOS中,通常使用如下命令:
美元符号($)之前的内容可能有所不同,具体取决于您的用户名和计算机名称。您键入的命令位于$之后。在Linux或macOS上,Python3的可执行文件名为python3,因此可以通过输入python3 script_name.py来运行python脚本。
在Windows上,命令提示符通常如下所示:
根据您的用户名,>之前的内容可能会有所不同,您输入的命令位于>之后。在Windows上,Python3的可执行文件通常为python。因此可以通过输入python script_name.py来运行python脚本。
无论哪种操作系统,本文的Python脚本的输出结果都是相同的。因此本文以Linux和macOS为例。
使用命令行执行execution_methods.py,如下所示:
在这个示例中,__name__具有值'__main__',其中引号(')表明该值为字符串类型。
请记住,在Python中,使用单引号(')和双引号(")定义的字符串没有区别。更多关于字符串的内容请参考Python的基本数据类型。
如果在脚本中包含"shebang行"并直接执行它(./execution_methods.py),或者使用IPython或Jupyter Notebook的%run,将会获取相同的结果。
您还可以通过向命令行添加-m参数的方法实现以模块的方式执行。通常情况下,推荐如下方式pip: python3 -m pip install package_name。
添加-m参数将会运行包中__main__.py的代码。更多关于__main__.py文件的内容可参考如何将开源Python包发布到PyPI中。
在三种情况中,__name__都具有相同的值:字符串'__main__'。
技术细节:Python文档中具体定义了__name__何时取值为'__main__'。
当通过标准输入,脚本或者交互提示中读取数据时,模块的__name__将取值为'__main__'。(来源)
__name__与__doc__,__package__和其他属性一起存储在模块的全局命名空间。更多关于属性的信息可参考Python数据模型文档,特别是关于模块和包的信息,请参阅Python Import文档。
导入模块或解释器
接下来是Python解释器执行代码的第二种方式:导入。在开发模块或脚本时,可以使用import关键字导入他人已经构建的模块。
在导入过程中,Python执行指定模块中定义的语句(但仅在第一次导入模块时)。要演示导入execution_methods.py文件的结果,需要启动Python解释器,然后导入execution_methods.py文件:
在此代码输出中,Python解释器执行了三次print()函数调用。前两行由于没有变量,在输出方面与在命令行上作为脚本执行时完全相同。但是第三个输出存在差异。
当Python解释器导入代码时,__name__的值与要导入的模块的名称相同。您可以通过第三行的输出了解这一点。__name__的值为'execution_methods',是Python导入的.py文件。
注意如果您在没有退出Python时再次导入模块,将不会有输出。
注意:更多关于导入在Python中如何工作的内容请参考官方文档和Python中的绝对和相对导入。
Main函数的最佳实践
既然您已经了解两种执行方式上的差异,那么掌握一些最佳实践方案还是很有用的。它们将适用于编写作为脚本运行的代码或者在另一个模块导入的代码。
如下是四种实践方式:
将大部分代码放入函数或类中
请记住,Python解释器在导入模块时会执行模块中的所有代码。有时如果想要实现用户可控的代码,会导致一些副作用,例如:
在这种情况下,想要实现用户控制触发此代码的执行,而不是让Python解释器在导入模块时执行代码。
因此,最佳方法是将大部分代码包含在函数或类中。这是因为当Python解释器遇到def或class关键字时,它只存储这些定义供以后使用,并且在用户通知之前不会实际执行。
将如下代码保存在best_practices.py以证明这个想法:
在此代码中,首先从time模块中导入sleep()。
在这个示例中,参数以秒的形式传入sleep()函数中,解释器将暂停一段时间再运行。随后,使用print()函数打印关于代码描述的语句。
之后,定义一个process_data()函数,执行如下五项操作:
在命令行中执行
当你将此文件作为脚本用命令行执行时会发生什么呢?
Python解释器将执行函数定义之外的from time import sleep和print(),之后将创建函数process_data()。然后,脚本将退出而不做任何进一步的操作,因为脚本没有任何执行process_data()的代码。
如下是这段脚本的执行结果:
我们在这里看到的输出是第一个print()的结果。注意,从time导入和定义process_data()函数不产生结果。具体来说,调用定义在process_data()内部的print()不会打印结果。
导入模块或解释器执行
在会话(或其他模块)中导入此文件时,Python解释器将执行相同的步骤。
Python解释器导入文件后,您可以使用已导入模块中定义的任何变量,类或函数。为了证明这一点,我们将使用可交互的Python解释器。启动解释器,然后键入import best_practices:
导入best_practices.py后唯一的输出来自process_data()函数外定义的print()。导入模块或解释器执行与基于命令行执行类似。
使用__name__控制代码的执行
如何实现基于命令行而不使用Python解释器导入文件来执行呢?
您可以使用__name__来决定执行上下文,并且当__name__等于"__main__"时才执行process_data()。在best_practices.py文件中添加如下代码:
这段代码添加了一个条件语句来检验__name__的值。当值为"__main__"时,条件为True。记住当__name__变量的特殊值为"__main__"时意味着Python解释器会执行脚本而不是将其导入。
条件语块内添加了四行代码(第12,13,14和15行):
现在,在命令行中运行best_practices.py,并观察输出的变化:
首先,输出显示了process_data()函数外的print()的调用结果。
之后,data的值被打印。因为当Python解释器将文件作为脚本执行时,变量__name__具有值"__main__",因此条件语句被计算为True。
接下来,脚本将调用process_data()并传入data进行修改。当process_data执行时,将输出一些状态信息。最终,将输出modified_data的值。
现在您可以验证从解释器(或其他模块)导入best_practices.py后发生的事情了。如下示例演示了这种情况:
注意,当前结果与将条件语句添加到文件末尾之前相同。因为此时__name__变量的值为"best_practices",因此条件语句结果为False,Python将不执行process_data()。
创建名为main()的函数来包含要运行的代码
现在,您可以编写作为脚本由从命令行执行并导入且没有副作用的Python代码。接下来,您将学习如何编写代码并使其他程序员能轻松地理解其含义。
许多语言,如C,C++,Java以及其他的一些语言,都会定义一个叫做main()的函数,当编译程序时,操作系统会自动调用该函数。此函数通常被称为入口点(entry point),因为它是程序进入执行的起始位置。
相比之下,Python没有一个特殊的函数作为脚本的入口点。实际上在Python中可以将入口点定义成任何名称。
尽管Python不要求将函数命名为main(),但是最佳的做法是将入口点函数命名为main()。这样方便其他程序员定位程序的起点。
此外,main()函数应该包含Python解释器执行文件时要运行的任何代码。这比将代码放入条件语块中更好,因为用户可以在导入模块时重复使用main()函数。
修改best_practices.py文件如下所示:
在这个示例中,定义了一个main()函数,它包含了上面的条件语句块。之后修改条件语块执行main()。如果您将此代码作为脚本运行或导入,将获得与上一节相同的输出。
在main()中调用其他函数
另一种常见的实现方式是在main()中调用其他函数,而不是直接将代码写入main()。这样做的好处在于可以实现将几个独立运行的子任务整合。
例如,某个脚本有如下功能:
如果在单独的函数中各自实现这些子任务,您(或其他用户)可以很容易地实现代码重用。之后您可以在main()函数中创建默认的工作流。
您可以根据自己的情况选择是否使用此方案。将任务拆分为多个函数会使重用更容易,但会增加他人理解代码的难度。
修改best_practices.py文件如下所示:
在此示例代码中,文件的前10行具有与之前相同的内容。第12行的第二个函数创建并返回一些示例数据,第17行的第三个函数模拟将修改后的数据写入数据库。
第21行定义了main()函数。在此示例中,对main()做出修改,它将调用数据读取,数据处理以及数据写入等功能。
首先,从read_data_from_web()中创建data。将data作为参数传入process_data(),之后将返回modified_data。最后,将modified_data传入write_data_to_database()。
脚本的最后两行是条件语块用于验证__name__,并且如果if语句为True,则执行main()。
在命令行中运行如下所示:
根据执行结果,Python解释器在执行main()函数时,将依次执行read_data_from_web(),process_data()以及write_data_to_database()。当然,您也可以导入best_practices.py文件并重用process_data()作为不同的数据输入源,如下所示:
在此示例中,导入了best_practices并且将其简写为bp。
导入过程会导致Python解释器执行best_practices.py的全部代码,因此输出显示解释文件用途的信息。
然后,从文件中存储数据而不是从Web中读取数据。之后,可以重用best_practices.py文件中的process_data()和write_data_to_database()函数。在此情况下,可以利用代码重写来取代在main()函数中实现全部的代码逻辑。
实践总结
以下是Python中main()函数的四个关键最佳实践:
结论
恭喜!您现在已经了解如何创建Python main()函数了。
本文介绍了如下内容:
现在,您可以开始编写一些非常棒的关于Python main()函数代码啦!
⑽ Python3基础
默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:
在 Python 3 中,非 ASCII 标识符也是允许的了。
保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
Python中单行注释以 # 开头,实例如下:
执行以上代码,输出结果为:
多行注释可以用多个 # 号,还有 ''' 和 """:
执行以上代码,输出结果为:
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:
以下代码最后一行语句缩进数的空格数不一致,会导致运行错误:
以上程序由于缩进不一致,执行后会出现类似以下错误:
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠()来实现多行语句,例如:
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(),例如:
python中数字有四种类型:整数、布尔型、浮点数和复数。
实例
输出结果为:
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住: 空行也是程序代码的一部分。
执行下面的程序在按回车键后就会等待用户输入:
以上代码中 ," "在结果输出前会输出两个新的空行。一旦用户按下 enter 键时,程序将退出。
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例:
执行以上代码,输出结果为:
缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。
如下实例:
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="" :
以上实例执行结果为:
在 python 用 import 或者 from...import 来导入相应的模块。
将整个模块(somemole)导入,格式为: import somemole
从某个模块中导入某个函数,格式为: from somemole import somefunction
从某个模块中导入多个函数,格式为: from somemole import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemole import *
import sys print ( ' ================Python import mode========================== ' ) ; print ( ' 命令行参数为: ' ) for i in sys . argv : print ( i ) print ( ' python 路径为 ' , sys . path )
from sys import argv , path # 导入特定的成员 print ( ' ================python from import=================================== ' ) print ( ' path: ' , path ) # 因为已经导入path成员,所以此处引用时不需要加sys.path
很多程序可以执行一些操作来查看一些基本信息,Python可以使用-h参数查看各参数帮助信息: