Python|学习笔记(二)- 基础语法

Python学习笔记系列

Posted by Jack on January 3, 2015
前言

本篇是Python学习笔记系列的第(二)篇,主要介绍了Python基础语法相关知识,包括基本数据类型、条件/循环语句、函数等。

语法

Python的语法比较简单,采用缩进的方式,以下面的代码为例:

# print absolute value of an integer:
a = 100
if a >= 0:
    print(a)
else:
    print(-a)
  • # 开头的语句是注释
  • 除去注释,每一行都是一个语句
  • 当语句以冒号 : 结尾时,下方缩进的语句视为代码块

⚠️ Python是大小写敏感的,如果系错了大小写,程序会报错。

数据类型

Python能够直接处理的数量类型有以下几种:

  • 整数

    Python的整数没有大小限制,所以天生支持大数据运算。

  • 浮点数

    Python的浮点数也没有大小限制,但是超出一定范围就直接被表示为 inf (无限大)。

  • 字符串

    以单引号 '' 或双引号 "" 扩起来的任意文本。

    如果字符串有很多字符需要转义,就需要加很多 \ ,为了简化Python允许r'' 表示 '' 内部的字符串默认不转义

    如果字符串内部有很多换行,用 \n 写在一行里不方便阅读,Python允许使用 '''...''' 的格式标识多行内容。多行字符串 '''...''' 还可以在前面加上 r 使用。

  • 布尔值

    一个布尔值只有 True False 两种值(请注意大小写)。

  • 空值

    Python中一个特殊的值,用 None 表示。None 不等同于 0 ,因为 0 是有意义的,而 None 是一个特殊的空值。

  • 此外,Python还提供了列表、字典等多种数据类型,还可以创建自定义的数据类型。

变量

Python在定义变量时不需要指定变量类型,这一点同静态语言(比如C语言)不一样,我们称之为动态语言(比如Swift)。

常量

在Python中通常使用全部大写的变量名来表示常量,这只是一种约定俗成的写法,其实Python中没有任何机制来保证常量不被改变


另外说一下Python中的除法运算,有两种:

  • 使用 /

    计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数

  • 使用 // ,俗称地板除

    整数的地板除永远是整数,即使除不尽(余数会被忽略)。

注:余数运算符:%


list

Python内置的有序集合,即可变数组,使用中括号 []进行初始化。

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
  • 计算长度

    >>> len(classmates)
    3
    
  • 可以用 -1 做索引,直接获取最后一个元素。以此类推,-2 -3 可以获取倒数第2个、倒数第3个。

  • 追加元素到末尾

    >>> classmates.append('Adam')
    >>> classmates
    ['Michael', 'Bob', 'Tracy', 'Adam']
    
  • 插入到指定的位置,比如索引号为1的位置:

    >>> classmates.insert(1, 'Jack')
    >>> classmates
    ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
    
  • 删除list元素,用pop()方法:

    # 删除末尾元素
    >>> classmates.pop()
    'Adam'
    >>> classmates
    ['Michael', 'Jack', 'Bob', 'Tracy']
      
    # 删除指定索引元素
    >>> classmates.pop(1)
    'Jack'
    >>> classmates
    ['Michael', 'Bob', 'Tracy']
    
tuple

tuple和list类似,即不可变数组,tuple一旦初始化就不能修改,它没有append(),insert()这样的方法。

使用小括号 ()进行初始化。

因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

>>> classmates = ('Michael', 'Bob', 'Tracy')
  • 如何定义一个只有1个元素的tuple:

    >>> t = (1,)
    >>> t
    (1,)因为如果写成
    

    因为如果写成 t = (1) 就会产生歧义,这样写 () 会被理解成数学公式中的小括号,定义的不是tuple,而是 1 这个自然数。所以定义tuple时加上一个逗号 , 来消除歧义

dict

Python内置字典,采用Key-Value键值对方式进行存储,使用大括号 {} 进行初始化。

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
  • 通过in判断key是否存在:

    >>> 'Thomas' in d
    False
    
  • 通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

    >>> d.get('Thomas')
    >>> d.get('Thomas', -1)
    -1
    
  • 删除一个key,用pop(key)方法

set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

通过 add(key) 方法可以添加元素到set中,通过remove(key)方法可以删除元素。

条件语句
if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>
循环语句

Python的循环有两种:

  • 一种是for…in循环,依次把list或tuple中的每个元素迭代出来:

    # Python提供一个 range() 函数,可以生成一个整数序列,再通过list()函数可以转换为list
    >>> list(range(5))
    [0, 1, 2, 3, 4]
    
  • 第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环:

    sum = 0
    n = 99
    while n > 0:
        sum = sum + n
        n = n - 2
    print(sum)
    

break 语句可以在循环过程中直接退出循环,而 continue 语句可以提前结束本轮循环,并直接开始下一轮循环

函数

Python内置了很多有用的函数,我们可以直接调用,不再赘述。

  • 定义函数

    定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

    如果你已经把 my_func() 的函数定义保存为 func.py 文件了,那么,可以在该文件的当前目录下启动Python解释器,用 from func import my_func 来导入 my_func() 函数,注意 func 是文件名(不含.py扩展名)

  • 空函数

    如果想定义一个什么事也不做的空函数,可以用pass语句:

    def nop():
        pass
    
  • 参数类型检查

    数据类型检查可以用内置函数isinstance()实现:

    def my_abs(x):
        if not isinstance(x, (int, float)):
            raise TypeError('bad operand type')
        if x >= 0:
            return x
        else:
            return -x
    
  • 返回多值

    Python的函数返回多值其实就是返回一个tuple。在语法上,返回一个tuple可以省略括号。多个变量也可以同时接收一个tuple,按位置赋给对应的值。

  • 默认参数

    必选参数在前,默认参数在后。牢记一点:默认参数必须指向不变对象!

  • 可变参数

    可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。

    在list或tuple前面加一个 * 号,可以把list或tuple的元素变成可变参数。

    def calc(*numbers):
        sum = 0
        for n in numbers:
            sum = sum + n * n
        return sum
    
  • 关键字参数

    关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

    def person(name, age, **kw):
        print('name:', name, 'age:', age, 'other:', kw)
    

    限制关键字参数的名字,可以用命名关键字参数,和关键字参数 **kw 不同,命名关键字参数需要一个特殊分隔符 ** 后面的参数被视为命名关键字参数。

    例如,只接收 cityjob 作为关键字参数。这种方式定义的函数如下:

    def person(name, age, *, city, job):
        print(name, age, city, job)
    

    如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

    def person(name, age, *args, city, job):
        print(name, age, args, city, job)
    

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。