我不知道的 Python

记录一些跟我平常比较陌生的 Python 用法。

自文档化的 Python 语言

一直以来都忽视了这门语言的一友好性,Python 对大多函数和模块都自带简短的解释文档,可以省下去网上查阅文档和书籍的时间,真的是非常的方便。

  • 列出模块中的所有函数—— dir()
>>> import math
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 
'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 
'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 
'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 
'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 
'trunc']
  • 查看完整的 Python 内置函数清单

>>> dir(__builtins__)

  • 查看模块或函数的文档字符串
# 查看math模块的帮助文档
>>> help(math)
# 查看具体到函数的帮助文档
>>> help(math.log)
  • 打印文档字符串
>>> print (math.__doc__)
This module is always available.  It provides access to the
mathematical functions defined by the C standard.

>>> print (math.log.__doc__)
log(x[, base])

Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
  • 自定义文档字符串
def area(radius):
    """Returns the area of a circle with given radius.
    For example:
    >>> area(2)
    12.566370614359172
    """
    return math.pi * radius ** 2

print area.__doc__

类型转换

Python 使用内建函数来简化类型转换这一工作。注意:2.x版本跟3.x版本有不一样的地方。

  • 整数、字符串、浮点数之间的转换
# Python 2.7.6 环境下
# 转换为浮点数
>>> float(3)
3.0
>>> float('3')
3.0
>>> float('3.2')
3.2

# 转换为字符串
>>> str(0)
'0'
>>> str(1.2)
'1.2'

# 转换为整数
>>> int(3.8)
3
>>> int('3')
3
>>> int('3.1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '3.1'
  • 圆整(总是向上圆整带来的偏差可能导致计算不准确,所以 3.x圆整到最接近的偶数)
>>> round(2.1)
2
>>> round(2.5)
2

>>> round(3.1)
3
>>> round(3.5)
4

赋值

  • 多重赋值(JavaScript 中解构赋值)
>>> a, b, c = 'a', 'b', 'c'
>>> a
'a'
>>> b
'b'
  • 交换变量的值
>>> a, b = 2, 5
>>> a
2
>>> a, b = b, a
>>> a
5

3.x版本中的input函数与2.x版本区别

  • 3.x 中的 input对应于2.x中的 raw_input函数
# 2.7 test.py
name = raw_input('enter your name:').strip().capitalize()
print 'Hello ' + name
$ python test.py
enter your name:         Carson chen
Hello Carson chen
  • 2.x 中的 input 函数,对用户输入的字符串求值
# 2.7 test.py
name = input('enter your name:').strip().capitalize()
print 'Hello ' + name
$ python test.py
enter your name:Carson
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    name = input('enter your name:')
  File "<string>", line 1, in <module>
NameError: name 'Carson' is not defined

字符串相关

  • 负数索引
>>> str = 'abc';
>>> str[-1]
'c'
>>> str[-3]
'a'
  • 查看字符编码:ord(char)
>>> ord('a')
97
>>> ord('b')
98
  • 查看编码字符:chr(number)
>>> chr(97)
'a'
>>> chr(98)
'b'

有始(2016.11.4)有终

逻辑行与物理行

# 逻辑行:逻辑上的意思的行数
# 一个逻辑行跨越多个物理行时必须使用行连接
print 'abc';print '123';print 'def'
print "we are \
family"
print  "It's very nice " \
       "of you"

# 物理行:实际上的看到的行数。
# 一个物理行一般可以包含多个逻辑行
# 一个物理行包含多个逻辑行用分号隔开
print 'a'
print 'abc';print '123';print 'def'

# 实例:1个物理行,3个逻辑行
print 'abc';print '123';print 'def'

# 实例:1个逻辑行,3个物理行
print '''这里是第一个物理行
这里是第二个物理行
这里是第三个物理行'''

results matching ""

    No results matching ""