Python appendix

PEP 8 规范

  • 模块使用全小写
  • 类名应采用单词首字母大写,无空格的格式,如MyClass
  • 变量和函数名采用小写加下划线,如my_function
  • 常变量(不改变)使用大写加下划线,如CAP_UNC
  • 与python关键词冲突的在后面加下划线,如if_
  • 避免使用空格
  • 每行不超过80个字符
  • 避免使用:from module import *
  • 每行只有一个语句
  • 尽量使用空格,而不是tabs

以上只是建议,并非要求全部遵守

Function Arguments(函数参数)

  • Python允许函数具有不同数量的参数。
    使用args作为函数参数使您能够向该函数传递任意数量的参数。然后,参数可以作为元组在函数体中访问。
    注意:
    args只能使用在命名形参之后;args只是习惯,可以换成其它名字
  1. def function(named_arg, *args):
  2. print(named_arg)
  3. print(args)
  4. function(1, 2, 3, 4, 5)
  • Default Values(默认值)
    函数的命名参数可以通过给它们一个默认值而成为可选的。这些参数必须位于没有默认值的命名参数之后。若传入了参数,则忽略该默认值
  1. def function(x, y, food="spam"):
  2. print(food)
  3. function(1, 2)
  4. function(3, 4, "egg")
  • *_kwargs_ (代表关键字参数)允许你处理你没有预先定义的命名参数。关键字参数返回一个字典,其中键是参数名,值是参数值。
  1. def my_func(x, y=7, *args, **kwargs):
  2. print(kwargs)
  3. my_func(2, 3, 4, 5, 6, a=7, b=8)

a and b are the names of the arguments that we passed to the function call.

The arguments returned by *kwargs are not included in args.

Tuple Unpacking

  • 元组解包允许您为可迭代对象(通常是元组)中的每个项赋值给一个变量。
  1. numbers = (1, 2, 3)
  2. a, b, c = numbers
  3. print(a)
  4. print(b)
  5. print(c)

可以通过执行a, b = b, a来交换变量,因为右边的b, a构成了元组(b, a),然后将其解包。

  • 以星号(*)开头的变量将获取可迭代对象中其他变量剩余的所有值。
  1. a, b, *c, d = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  2. print(a)
  3. print(b)
  4. print(c)
  5. print(d)

Ternary Operator(三元运算符)

条件表达式提供了if语句的功能,同时使用更少的代码。它们不应该被过度使用,因为它们很容易降低可读性,但它们在赋值变量时通常很有用。条件表达式也被称为三元值的应用

  1. a = 7
  2. b = 1 if a>=5 else 42
  3. print(b)

三元运算符检查条件并返回相应的值。在上面的例子中,当条件为真时,b被赋值为1,如果a小于5,它将被赋值42。

之所以称三元操作符,是因为它与大多数操作符不同,它有三个参数。

else

  • else语句最常与if语句一起使用,但它也可以跟在for或while循环之后,这赋予了它不同的含义。对于for或while循环,如果循环正常结束(当break语句不导致退出循环时),则调用循环中的代码。
  1. for i in range(10):
  2. if i == 999:
  3. break
  4. else:
  5. print("Unbroken 1")
  6. for i in range(10):
  7. if i == 5:
  8. break
  9. else:
  10. print("Unbroken 2")

第一个for循环正常执行,导致输出“Unbroken 1”。第二个循环由于中断而退出,这就是它的else语句没有执行的原因。

  • else语句也可以与try/except语句一起使用。在这种情况下,只有在try语句中没有出现错误时,才会执行其中的代码。
  1. try:
  2. print(1)
  3. except ZeroDivisionError:
  4. print(2)
  5. else:
  6. print(3)
  7. try:
  8. print(1/0)
  9. except ZeroDivisionError:
  10. print(4)
  11. else:
  12. print(5)

main

  • 大多数Python代码要么是要导入的模块,要么是执行某些操作的脚本。但是,有时制作一个既可以作为模块导入又可以作为脚本运行的文件是有用的。为此,将脚本代码放置在if name==”main“中。这将确保在导入文件时不会运行它。
  • 当Python解释器读取源文件时,它会执行在文件中找到的所有代码。在执行代码之前,它定义了一些特殊变量。例如,如果Python解释器正在运行该模块(源文件)作为主程序,它会将特殊的name变量设置为值”main“。如果该文件是从另一个模块导入的,则name将被设置为该模块的名称

QUIZ

Adding Words

You need to write a function that takes multiple words as its argument and returns a concatenated version of those words separated by dashes (-).
The function should be able to take a varying number of words as the argument.

Sample Input
this
is
great

Sample Output
this-is-great

  1. def concatenate(*args):
  2. dash = "-"
  3. str = dash.join(args)
  4. return str
  5. print(concatenate("I", "love", "Python", "!"))