Python学习

  • Python代码一行语句结束不需要以分号结束。
  • Python的注释符是#
  • Python中的普通字符串在内部是以8位的ASCII码形成存储的。而Unicode字符串则存储为16位的Unicode字符。在Python 3.0中,所有字符串都是Unicode字符串。

数字和表达式:

交互式Python解释器可以当作强大的计算器,例如直接输入2+2,就会输出4。

1
2
>>> 2 + 2
4

整数除法(在3.0版本之前的Python是这样的)

1
2
>>> 1/2
0

一个整数被另一个整数除,计算结果的小数部分被截掉了,只留下整数部分。如果我们需要的是普通的除法,即希望结果是0.5,则参与除法的两个数中至少有一个是浮点数。

1
2
3
4
>> 1/2.0
0.5
>>> 1/2.
0.5

或者还有一种方法就是执行以下语句:from __future__ import division (注意future的前后是两个下划线)。

1
2
3
>>> from __future__ import division
>>> 1/2
0.5

Python提供了另一种实现整除的操作符:双斜线

1
2
3
4
5
6
7
>>> 2//3
0
>>> 5//4
1
// 就算是浮点数,双斜线也会执行整除
>>> 1.0//2.0
0.0

取余运算符:

1
2
3
4
>>> 1%2
1
>>> 8%3
2

最后是幂(乘方)运算符:

1
2
3
4
5
6
>>> 2**3
8
>>> -2**2
-4
>>> (-2)**2
4

注意:幂运算符比取反(一元减运算符)的优先级要高,所以-2**2等同于-(2**2)

长整数
1
2
>>> 10000000000000000000000
10000000000000000000000L
  • 2.2版本之后的Python在处理大整数时更加灵活,要是在2.2之前则会报错。
  • 长整数的书写就是在数字后面加上L
  • 长整数和普通整数可以混合使用
    1
    2
    >>> 214324345345436433*242434322111111111+2
    51959577375728553554132546850507065L

普通整数不能大于2 147 483 647,也不能小于-2 147 483 648。真是顿时觉得Python好牛逼啊!

十六进制和八进制
1
2
3
4
5
6
7
8
>>> 0xAF
175
>>> 011
9
>>> 010
8
>>> 0XBC
188

变量

假设用x代表3,执行x = 3,这样的操作称为赋值,数值3被赋给了变量x。变量赋值后,就可以在表达式中使用变量了。

1
2
3
4
>>> x = 3
>>> x*2
6
var dd=9

变量名可疑包括字母、数字和下划线(_)。变量不能以数字开头。

获取用户输入

input函数

1
2
>>> x = input("x :")
x :4

函数

前面说过幂运算符(**),可以用一个函数来代替,那就是pow函数。

1
2
3
4
>>> 2**3
8
>>> pow(2,3)
8

Python有很多函数,当然我们也可以自己定义函数。通常将pow等标准函数称为内建函数
还有很多像这样的内建函数用于数值表达式。比如abs函数得到数的绝对值。round函数会把浮点数四舍五入为最接近的整数值。

1
2
3
4
5
6
>>> abs(-3)
3
>>> 1/2
0
>>> round(1.0/2.0)
1.0

注意:整数除法总是会截除掉结果的小数部分。
round函数会把浮点数四舍五入为最接近的整数值。

模块

介绍下math模块。如果想将一个给定的数值向下取整为某个特定的整数,用math模块下的floor。对应的向上取整即将给定的数值转换为大于或等于它的最小整数则用ceil。它们返回值的类型都是浮点数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> import math
>>> math.floor(22.1)
22.0
>>> math.floor(22.9)
22.0
>>> int(43.9)
43
>>> int(43.2)
43
>>> math.ceil(22.1)
23.0
>>> math.ceil(22.9)
23.0
>>> math.ceil(22)
22.0

可以使用变量来引用函数:

1
2
3
>>> foo = math.ceil
>>> foo(23.9)
24.0

字符串

  • 拼接字符串

    1
    2
    3
    4
    5
    6
    >>> "hello" + " world"
    'hello world'
    >>> x = "hello,"
    >>> y = "world!"
    >>> x + y
    'hello,world!'
    • 字符串表示——str和repr
      通过str函数,它会把值转换为合理形式的字符串,以便用户可以理解。另一种是通过repr函数,它会创建一个字符串,以合法的Python表达式的形式来表示值
      1
      2
      3
      4
      5
      6
      7
      8
      >>> print repr("Hello,world")
      'Hello,world'
      >>> print repr(10000L)
      10000L
      >>> print str(10000L)
      10000
      >>> print str("Hello,world")
      Hello,world

    repr(x)也可以写作`x`实现,注意`是反引号,而不是单引号。

    • input和raw_input的区别:
      raw_input函数会把所有的输入当做原始数据,然后将其放入字符串中;input会假设用户输入的是合法的Python表达式。
      1
      2
      3
      4
      5
      6
      >>> input("what is your name")
      what is your name2
      2
      >>> raw_input("what is your name")
      what is your name1
      '1'
  • 长字符串 :
    如果需要写一个非常长的字符串,它需要跨多行,用三个引号表示普通引号。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >> print '''this is a very long string
    ... it continues here
    ... And it's not over yet
    ... "hello world"
    ... Still here!'''
    this is a very long string
    it continues here
    And it's not over yet
    "hello world"
    Still here!
  • 普通字符串也可以跨行。如果一行之中最后一个字符是反斜线,那么换行符本身就转义了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> print "hello,\
    ... world"
    hello,world
    >>> print 1+2+\
    ... +3
    6
    >>> print \
    ... "hello world"
    hello world
  • 原始字符串
    我们都知道反斜线,它会转义。但是有时候我们不希望它这么做呢。我们希望字符串中包含反斜线,甚至很多反斜线,又亦或再加上n怎么办呢?如果再用反斜线去进行转义的话就显得太麻烦了。

    1
    2
    3
    4
    5
    6
    7
    >>> print 'C:\nowhere'
    C:
    owhere
    >>> print r'C:\nowhere'
    C:\nowhere
    >>> print r'C:\Program Files\fnord\foo\bar\baz\frozz\ss'
    C:\Program Files\fnord\foo\bar\baz\frozz\ss

可以看到原始字符串以r开头。
如果希望原始字符只以一个反斜线作为结尾的话,把反斜线单独作为一个字符串来处理。

1
2
3
4
5
>>> print r'C:\Program Files\fnord\foo\bar\baz\frozz\\'
C:\Program Files\fnord\foo\bar\baz\frozz\\
>>> print r'C:\Program Files\fnord\foo\bar\baz\frozz' '\\'
C:\Program Files\fnord\foo\bar\baz\frozz\