Python编程基础-Python essentials

李金的中文Python笔记[https://github.com/lijin-thu/notes-python]的学习笔记及摘要。

SCIentific PYthon 简介

Ipython 提供了一个很好的解释器界面。

Matplotlib 提供了一个类似 Matlab 的画图工具。

Numpy 提供了 ndarray 对象,可以进行快速的向量化计算。

ScipyPython 中进行科学计算的一个第三方库,以 Numpy 为基础。

Pandas 是处理时间序列数据的第三方库,提供一个类似 R 语言的环境。

StatsModels 是一个统计库,着重于统计模型。

ScikitsScipy 为基础,提供如 scikits-learn 机器学习和**scikits-image 图像处理**等高级用法。

分片

  • 分片用来从序列中提取出想要的子序列,其用法为:
    var[lower:upper:step]
    其范围包括 lower ,但不包括 upper ,即 [lower, upper)step 表示取值间隔大小,如果没有默认为1

  • 当step的值为负时,省略lower意味着从结尾开始分片,省略upper意味着一直分片到开头。

s = "hello world"
s[::-1]
> 'dlrow olleh'

列表

向列表添加单个元素

l.append(ob) 将元素 ob 添加到列表 l 的最后。

a = [10, 11, 12]
a.append(11)

向列表添加序列

l.extend(lst) 将序列 lst 的元素依次添加到列表 l 的最后,作用相当于 l += lst

a = [10, 11, 12, 11]
a.extend([1, 2])

排序

l.sort() 会将列表中的元素按照一定的规则排序:

a = [10, 1, 11, 13, 11, 2]
a.sort()
print a
> [1, 2, 10, 11, 11, 13]

如果不想改变原来列表中的值,可以使用 sorted 函数:

a = [10, 1, 11, 13, 11, 2]
b = sorted(a)
print a
print b
> [10, 1, 11, 13, 11, 2]
> [1, 2, 10, 11, 11, 13]

列表反向

l.reverse() 会将列表中的元素从后向前排列。

a = [1, 2, 3, 4, 5, 6]
a.reverse()
print a
> [6, 5, 4, 3, 2, 1]

如果不想改变原来列表中的值,可以使用这样的方法:

a = [1, 2, 3, 4, 5, 6]
b = a[::-1]
print a
print b
> [1, 2, 3, 4, 5, 6]
> [6, 5, 4, 3, 2, 1]

字典

get方法,没有该键则返回默认值None

之前已经见过,用索引可以找到一个键对应的值,但是当字典中没有这个键的时候,Python会报错,这时候可以使用字典的 get 方法来处理这种情况,其用法如下:
d.get(key, default = None)
返回字典中键 key 对应的值,如果没有这个键,返回 default 指定的值(默认是 None )。

pop 方法删除元素

pop 方法可以用来弹出字典中某个键对应的值,同时也可以指定默认参数:
d.pop(key, default = None)
删除并返回字典中键 key 对应的值,如果没有这个键,返回 default 指定的值(默认是 None )。

update方法更新字典

之前已经知道,可以通过索引来插入、修改单个键值对,但是如果想对多个键值对进行操作,这种方法就显得比较麻烦,好在有 update 方法:
d.update(newd)
将字典newd中的内容更新到d中去。

keys 方法,values 方法和items 方法

d.keys(),返回一个由所有键组成的列表;
d.values(),返回一个由所有值组成的列表;
d.items() ,返回一个由所有键值对元组组成的列表;


for 循环

range和xrange

  • range(10000)会先生成一个长度为 100000 的临时列表
  • 使用 xrange 来代替 range 函数,其效果与range函数相同,但是 xrange 并不会一次性的产生所有的数据

列表推导式

循环可以用来生成列表:

values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values]
print squares
> [100, 441, 16, 49, 144]

还可以在列表推导式中加入条件进行筛选。例如在上面的例子中,假如只想保留列表中不大于10的数的平方:

values = [10, 21, 4, 7, 12]
squares = [x**2 for x in values if x <= 10]
print squares
> [100, 16, 49]

也可以使用推导式生成集合和字典:

square_set = {x**2 for x in values if x <= 10}
print(square_set)
square_dict = {x: x**2 for x in values if x <= 10}
print(square_dict)
> set([16, 49, 100])
> {10: 100, 4: 16, 7: 49}

函数

定义函数

def add(x, y):
    """Add two numbers"""
    a = x + y
    return a

函数通常有一下几个特征:

  • 使用 def 关键词来定义一个函数。
  • def 后面是函数的名称,括号中是函数的参数,不同的参数用 , 隔开, def foo(): 的形式是必须要有的,参数可以为空;
  • 使用缩进来划分函数的内容;
  • docstring""" 包含的字符串,用来解释函数的用途,可省略;
  • return 返回特定的值,如果省略,返回 None

接收不定参数

*args 和 **kwargs
*args 表示参数数目不定,可以看成一个元组,把第一个参数后面的参数当作元组中的元素

def add(x, *args):
    total = x
    for arg in args:
        total += arg
    return total
print add(1, 2, 3, 4)
print add(1, 2)
> 10
> 3

**kwargs 表示参数数目不定,相当于一个字典,关键词和值对应于键值对

def add(x, **kwargs):
   total = x
   for arg, value in kwargs.items():
       print "adding ", arg
       total += value
   return total
print add(10, y=11, z=12, w=13)

> adding  y
> adding  z
> adding  w
> 46

假设我们有这样的一个文件夹:

foo/

  • __init__.py
  • bar.py (defines func)
  • baz.py (defines zap)

这意味着 foo 是一个包,我们可以这样导入其中的内容:

from foo.bar import func
from foo.baz import zap

barbaz 都是 foo 文件夹下的 .py 文件。

导入包要求:

  • 文件夹 fooPython的搜索路径中
  • __init__.py 表示 foo 是一个包,它可以是个空文件。

异常处理

except 的值改成 Exception 类,来捕获所有的异常。

import math

while True:
    try:
        text = raw_input('> ')
        if text[0] == 'q':
            break
        x = float(text)
        y = 1 / math.log10(x)
        print "1 / log10({0}) = {1}".format(x, y)
    except ValueError:
        print "the value must be greater than 0"
    except ZeroDivisionError:
        print "the value must not be 1"
    except Exception:
        print "unexpected error"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值