谷歌Python教程-Python简介

谷歌Python教程-Python简介

语言简介

Python 是一种动态解释(字节码编译)的语言。源代码中没有变量、参数、函数或方法的类型声明。这会使代码简短且灵活,而且您将失去对源代码的编译时类型检查。Python 会在运行时跟踪所有值的类型,并会标记在运行时不适用的代码。

要了解 Python 代码是如何运行的,一种绝佳方式就是运行 Python 解释器,并在其中直接输入代码。如果您有这样的疑问:“如果我将 int 添加到 list,会发生什么情况?”只需在 Python 解释器中输入查询内容,这种方法非常快捷,很可能是查看具体情况的最好方式。(请参见下文,了解实际情况!)

$ python        ## Run the Python interpreter
Python 3.X.X (XXX, XXX XX XXXX, 03:41:42) [XXX] on XXX
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 6       ## set a variable in this interpreter session
>>> a           ## entering an expression prints its value
6
>>> a + 2
8
>>> a = 'hi'    ## 'a' can hold a string just as well
>>> a
'hi'
>>> len(a)      ## call the len() function on a string
2
>>> a + len(a)  ## try something that doesn't work
Traceback (most recent call last):
  File "", line 1, in 
TypeError: can only concatenate str (not "int") to str
>>> a + str(len(a))  ## probably what you really wanted
'hi2'
>>> foo         ## try something else that doesn't work
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'foo' is not defined
>>> ^D          ## type CTRL-d to exit (CTRL-z in Windows/DOS terminal)

这两行 python 会在您输入 Python 后以及 >>> 提示符前显示输出内容,告知您所用 Python 的版本及其构建位置。只要输出的第一部分是“Python 3”,这些示例就应该适合您。

如上所示,使用变量和运算符进行实验非常简单。此外,如果代码试图读取尚未赋值的变量,解释器就会引发(又用 Python 所谓的“提升”)运行时错误。与 C++ 和 Java 一样,Python 区分大小写,因此“a”和“A”是不同的变量。行的末尾表示语句的结束,因此与 C++ 和 Java 不同,Python 不需要在每个语句的末尾添加英文分号。注释以“#”开头,并延伸到行尾。

Python 源代码

Python 源文件使用“.py”扩展名,称为“模块”。对于 Python 模块 hello.py,最简单的运行方式是使用 shell 命令“python hello.py Alice”,该脚本会调用 Python 解释器以执行 hello.py 中的代码,并向其传递命令行参数“Alice”。请参阅官方文档页面,了解从命令行运行 Python 时可使用的所有不同选项。

下面是一个非常简单的 hello.py 程序(请注意,代码块严格使用缩进而不是大括号进行分隔,后面会详细介绍!):

#!/usr/bin/env python

# import modules used here -- sys is a very standard one
import sys

# Gather our code in a main() function
def main():
    print('Hello there', sys.argv[1])
    # Command line args are in sys.argv[1], sys.argv[2] ...
    # sys.argv[0] is the script name itself and can be ignored

# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
    main()

通过命令行运行此程序应如下所示:


$ python hello.py Guido
Hello there Guido
$ ./hello.py Alice  ## without needing 'python' first (Unix)
Hello there Alice

导入、命令行参数和 len()

Python 文件(即“模块”)中的最外层的语句执行其一次性设置 - 首次导入模块时,这些语句会从上到下运行,设置其变量和函数。Python 模块可以直接运行(如上面的“python hello.py Bob”),也可以由一些其他模块导入和使用。直接运行 Python 文件时,特殊变量“name”会设置为“main”。因此,上面显示的样板 if name ==... 通常是在模块直接运行时调用 main() 函数,而在模块由其他模块导入时不会调用。

在标准 Python 程序中,列表 sys.argv 以标准方式包含命令行参数,其中 sys.argv[0] 是程序本身,sys.argv[1] 是第一个参数,以此类推。如果您知道 argc 或参数的数量,只需使用 len(sys.argv) 从 Python 请求此值即可,就像我们在请求上述字符串时在交互式解释器代码中所做的那样。一般来说,len() 可以告诉您字符串的长度、列表和元组中的元素数量(另一种类似于数组的数据结构)以及字典中的键值对数量。

用户定义的函数

Python 中的函数定义如下:

# Defines a "repeat" function that takes 2 arguments.
def repeat(s, exclaim):
    """
    Returns the string 's' repeated 3 times.
    If exclaim is true, add exclamation marks.
    """

    result = s + s + s # can also use "s * 3" which is faster (Why?)
    if exclaim:
        result = result + '!!!'
    return result
 ```
另请注意,函数或 if 语句所在的行如何都按相同的缩进级别进行分组。我们还介绍了两种不同的字符串重复方式,使用 + 运算符更加方便,但 * 也是可行的,因为这是 Python 的“重复”运算符,这意味着 '-' * 10 可以为 '----------' 提供一种创建屏幕上“代码行”的简洁方式。在代码注释中,我们提示 * 比 + 速度更快,这是因为 * 计算一次所生成对象的大小,而使用 + 表示每次调用 + 时都会进行计算。+ 和 * 都称为“重载”运算符,因为它们表示数字与字符串(和其他数据类型)的含义不同。

def 关键字定义函数时,其参数位于括号内,代码缩进。函数的第一行可以是描述函数作用的文档字符串(“文档字符串”)。文档字符串可以是单行,也可以是多行说明(如上例所示)。(这些是“三引号”,这是 Python 独有的功能!)函数中定义的变量是该函数的本地变量,因此上述函数中的“result”与另一个函数中的“result”变量是分开的。return 语句可以接受参数,在这种情况下,该参数是返回给调用方的值。

以下是调用上述 repeat() 函数的代码,用于输出其返回的内容:

def main():
    print(repeat('Yay', False))      ## YayYayYay
    print(repeat('Woo Hoo', True))   ## Woo HooWoo HooWoo Hoo!!!
在运行时,函数必须先通过执行“def”进行定义,然后再调用。一般而言,将 main() 函数及其位于其上调用的函数移到文件底部。

### 缩进
Python 的一项异常功能是空白缩进会影响代码的含义。语句的逻辑块(如构成函数的语句块)应具有相同的缩进,根据其父函数或“if”等缩进进行设置。如果组中的其中一行代码有不同的缩进,则会被标记为语法错误。

使用 Python 一开始可能会觉得有点奇怪,但这是一种合乎逻辑的逻辑,我很快就熟悉了。避免使用 TAB,因为它们会大大增加缩进方案(更不用说 TAB 在不同平台上可能表示不同的内容)。将编辑器设置为插入空格,而非 Python 代码的 TAB。

新手经常会问的一个问题是:“我应该缩进多少空格?”根据官方 Python 样式指南 (PEP 8),您应缩进 4 个空格。(一个有趣的事实:Google 的内部样式准则规定缩进 2 个空格!)

### 运行时检查代码
Python 在编译时只执行非常少的检查,将每行的所有类型、名称等检查推迟到该行运行为止。假设上面的 main() 调用 repeat(),如下所示:

def main():
if name == 'Guido':
print(repeeeet(name) + '!!!')
else:
print(repeat(name))

if 语句包含明显错误,其中 repeat() 函数被意外地输入为 repeeeet()。有趣的是 Python 代码,只要在运行时的名称不是“Guido”,这段代码就会正常编译和运行。仅当运行实际上尝试执行 repeeeet() 时,它才会注意到没有此类函数,并且会引发错误。此代码段中还有一个错误。名称尚未与“Guido”进行比较。如果尝试评估未分配的变量,Python 将引发“NameError”。这些示例表明,当您首次运行 Python 程序时,最先看到的部分错误是简单的拼写错误或未初始化的变量。在 Java 等语言系统中,采用这种更为详细的语言(例如 Java)的优势在于,它们可以在编译时捕获此类错误(当然,您必须维护所有这类信息...这是利弊)。

### 变量名称
由于 Python 变量在源代码中没有拼写出任何类型,因此为变量指定有意义的名称有助于提醒所发生的情况。因此,如果它是单个名称,请使用“name”,如果它是元组列表,则使用“name”,如果它是元组列表,则使用“元组”。许多基本的 Python 错误都是因为忘记每个变量中的类型值而导致的,所以请使用变量名称(您具备所有名称)来帮助确保规则的正确性。

就实际命名而言,某些语言倾向于使用由“多个字词”构成的变量名称中的下划线部分,而其他语言则首选驼峰式命名。一般而言,Python 会优先使用下划线方法,但如果开发者集成到已采用该样式的现有 Python 代码中,则引导其遵循驼峰式命名法。可读性计数。如需了解详情,请参阅 PEP 8 中的命名惯例部分。

正如您可以猜到的,“if”和“when”等关键字不能用作变量名称,否则就会收到语法错误。不过,请注意不要将内置函数用作变量名称。例如,虽然“str”、“list”和“print”可能看起来不错,但实际上您可以替换这些系统变量。内置函数不是关键字,因此容易被新的 Python 开发者无意使用。

### 详细了解模块及其命名空间
假设您有一个包含“def foo()”的模块“binky.py”。该 foo 函数的完全限定名称为“binky.foo”。这样,各种 Python 模块可以随意为其函数和变量命名,并且变量名称不会冲突 - module1.foo 与 module2.foo 不同。在 Python 词汇中,我们假设 binky、module1 和 module2 都有自己的“命名空间”,正如您所猜测的,它们是变量名称到对象的绑定。

例如,我们的标准“sys”模块包含一些标准系统工具,例如 argv 列表和 exit() 函数。使用“import sys”语句,您可以访问 sys 模块中的定义,并以完全限定名称访问这些定义,例如 sys.exit()。(没错,“sys”也有一个命名空间!)

import sys

Now can refer to sys.xxx facilities

sys.exit(0)


另一种导入表单如下所示:“from sys import argv, exit”。这使得 argv 和 exit() 可以用其简称表示;不过,我们建议使用具有完全限定名称的原始形式,因为这样更容易确定函数或属性的来源。

很多模块和软件包与 Python 解释器的标准安装捆绑在一起,因此您不必执行任何额外操作即可使用它们。这些库统称为“Python 标准库”。常用的模块/软件包包括:

sys - 对 exit()、argv、stdin、stdout 等的访问权限
re — 正则表达式
os - 操作系统界面、文件系统
您可以在 http://docs.python.org/library 找到所有标准库模块和软件包的文档。

在线帮助、help()和dir()
您可以通过多种方式获取 Python 帮助。

在 Google 中搜索,以“python”开头,例如“python list”或“python string 小写”。第一次命中通常是答案。出于某些原因,该技术在 Python 中似乎比在其他语言中效果更好。
官方 Python 文档网站 docs.python.org 包含高品质的文档。尽管如此,我经常会在 Google 上搜索几个字词,这样速度更快。
我们还提供了官方家教论坛,专门面向 Python 和/或编程新手。
您可以在 StackOverflow 和 Quora 上找到许多问题(和答案)。
请使用 help() 和 dir() 函数(见下文)。
在 Python 解释器内,help() 函数会提取各种模块、函数和方法的文档字符串。这些文档字符串类似于 Java 的 javadoc。dir() 函数告诉您对象的属性。下面是从解释器调用 help() 和 dir() 的一些方法:

help(len) - 内置 len() 函数的帮助字符串;请注意,它是“len”,而不是“len()”,后者是对函数的调用,我们不希望
help(sys) - sys 模块的帮助字符串(必须先执行 import sys)
dir(sys) - dir() 与 help() 类似,但只是简要列出了其定义的符号或“属性”
help(sys.exit) - sys 模块中 exit() 函数的帮助字符串
help('xyz'.split) - 适用于字符串对象的 split() 方法的帮助字符串。您可以使用该对象本身或其对象示例调用 help()。例如,调用 help('xyz'.split) 与调用 help(str.split) 相同。
help(list) - list 对象的帮助字符串
dir(list) - 显示 list 对象属性,包括其方法
help(list.append) - 适用于 list 对象的 append() 方法的帮助字符串.
© 版权声明
THE END
喜欢就支持一下吧
点赞1
分享