Google's Python Class 1 (Python Introduction)

原文:http://code.google.com/intl/zh-CN/edu/languages/google-python-class/introduction.html

 

 

Python Introduction

Python是一种动态解释型语言。Python代码不需要为方法和变量指定类型,这种特性让Python保持精简和灵活的同时也牺牲了编译期类型检查的优点。Python会在运行期检查并标示出有问题得变量或代码。

理解Python是如何工作的最好方法是在解释器中真正执行一段Python代码。如果你曾经有类似于“当把一个int数据放进list的时候会发生什么?”这样的问题的话 .. 再解释器中尝试一下是最快速找到答案的方法。Python不需要指定变量的类型 --- 直接把代码敲进去就行了。 如果解释器尝试读取的数据没有被赋值,Python会抛出一个运行期error. 和C++、Java一样,Python是对大小写敏感的(a和A是不同的变量)。 不同与C++、Java的地方在于Python只需要换行即可表示一条语句的结束。 你可以在每行代码的最后加上一个分号,但是我没推荐你不要这么做(仅仅是建议)。 Python注释以#开头直至一行的结束。

$ python  ## Run the python interpreter

Python 2.4.4 (#1, Oct 18 2006, 10:34:39)

[ GCC 4.0 . 1 ( Apple Computer , Inc . build 5341 )] on darwin

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 >>> foo(a)       ## try something that doesn't work Traceback ( most recent call last ):   File " " , line 1 , in ? NameError : name 'foo' is not defined >>> ctrl - d             ## type ctrl-d to exit (ctrl-z on Windows)

Python Program

Python源代码以".py"为后缀。 运行一个名为"hello.py"的Python文件的最简单方法是通过shell执行 ”python hello.py Alice" -- 加载并执行hello.py,同时传递参数Alice。

下面是这个非常简单的hello.py文件:

#!/usr/bin/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()

从shell执行它:

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

Python Module

Python文件或module的最外层语句会进行一次性初始化 -- 按照从上到下的顺序依次执行。 Python Module可以像 "python hello.py Bob"一样直接执行 -- 也可以被其他module引入(import). 当直接执行Python文件的时候,一个特殊的内置"__name__"变量会被设置为"__main__". 因此使用 if __name__ ==... 这样的语句可以判断文件是直接被执行的还是作为一个模块被引入的。

在标准的Python种,sys.argv表示命令行输入的内容,sys.argv[0]表示命令本身, sys.argv[1]是指真正的第一个传入参数。

Functions

函数定义的形式:

# Defines a "repeat" function that takes 2 arguments.
def repeat(s, exclaim):
  """Returns the string s repeated 3 times.
  If exclaim is true, adds exclamation marks.
  """
  
  result = s + s + s
  if exclaim:
    result = result + '!!!'
  return result

# Notice also how the lines that make up the function or if-statement
# are grouped by  all having the same indentation.

"def"语句使用圆括号和缩进定义一个函数。 下面的多行注释(docstring)标示了该函数的说明,可以通过__doc__这个特殊内置变量获得。 docstring可以是单行也可以是多行。在函数体内定义的变量属于本地变量,与其他函数的变量可以同名但没有任何冲突。

下面的代码调用了这个函数并打印结果:

def main():
  print repeat('Yay', False)      ## Yay
  print repeat('Woo Hoo', True)   ## Woo Hoo!!!

函数必须在运行前通过def语句进行定义,所以常用的做法是在文件的末尾写一个main()函数来调用上面定义的函数。

Indentation(缩进)

Python中一个不同寻常的特性是使用缩进来表述函数的上下文意义. 再同一个函数层级下的语句必须使用相同的缩进来表示。 如果一组代码种的某一行使用了错误的缩进,python解释器会在运行时报错。

Python对缩进的使用初看起来很奇怪,但是我们通常能很快因为他的逻辑严谨而适应它。 由于Tab常常让缩进变得复杂,所以一定要避免在文件中使用Tab进行缩进。尝试把你的编辑器种的tab键替换成多个空格。

运行时代码检查

Python只会在编译器进行很有限的代码检查,大部分的检查会在运行期完成,改造上面提到的代码如下:

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

if语句下的repeeet明显不正确. 但是由于name不可能为Guido,所以这段代码编译、运行正常。 只有当程序真正要尝试执行repeeet的时候,解释器才会报错。 这就意味着你写程序的时候如果犯了类似的拼写错误会很难发现,这也是Java、C++这样的语言的优势所在,他们会在编译器检查所有类型、拼写。 (这也意味着你要为所有变量声明类型信息...很公平不是吗).

变量命名

由于Python没有显示的变量类型,所以你一定要尽可能的使用有意义的单词描述变量. 例如使用name表示一个简单的名字,使用tuples表示一组元组. 很多python错误都是由于变量名的意义模糊造成的,所以尽可能的使用好记、有意义的命名。

Modules and Imports(模块和引入模块)

任何一个python文件都可以被称为一个模块(*module*)。 "binky.py" 可以被成为一个binky模块. 模块是由一组定义如 "x = 6" 和 "def foo()" 组成的. 我们假设 "binky.py" 包含一个 "def foo()"定义. 那么完整的foo函数名应该为"binky.foo". 这就是说不同的模块可以自由定义他们的方法名,多个文件下同函数名不会产生冲突 -- module1.foo 与module2.foo是两个不同的函数.

比如我们的"sys"模块包含一些标准的系统工具,如argv, exit() 函数. 在另一个文件中使用"import sys"引入sys模块不会让所有的定义都直接引入,而是使用他们的全限定名称,如:

  import sys

  # Now can refer to sys.xxx facilities
  sys.exit(0)

另一种模块引入方法是"from hashing import sha1, md5",这种方式会直接引入sha1、md5这样的简写(即可以直接使用而不需要全限定名).

Python标准安装包中已经包含了最常用的一些模块,所以你可以直接使用,如:

  • sys -- 包含exit(), argv, stdin, stdout, ...
  • re -- 正则表达式
  • os -- 系统操作接口、文件操作接口

在线帮助

有三个途径获得Python帮助:

  • 在google进行"python"开头的搜索, 如"python list" 或者 "python string lowercase". 第一个结果往往是我们需要的。不知道为何,进行python会比进行其他语言的搜索获得的数据更加准确和高质量。
  • Python文档官方网站 -- docs.python.org -- 有很多高质量的文档,尽管如此我还是用google更快一些。
  • 使用内置的help()函数。

在Python解释器中,help()函数会把函数、类、或者变量的使用说明显示出来,这跟Java里的Javadoc类似. 下面是一些常用的使用方法进行:

  • help(len) -- 查看len函数的函数说明 (注意这里是"len"而不是"len()",len()会调用函数)
  • help(sys) -- 查看sys模块的说明 (必须先执行一下"import sys")
  • dir(sys) -- dir()与help()类似 ,但是只给出sys模块的定义列表
  • help(sys.exit) -- docs for the exit() function inside of sys
  • help('xyz'.split) -- it turns out that the module "str" contains the built-in string code, but if you did not know that, you can call help() just using an example of the sort of call you mean: here 'xyz'.foo meaning the foo() method that runs on strings
  • help(list) -- docs for the built in "list" module
  • help(list.append) -- docs for the append() function in the list module

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值