• Python基础笔记


    [基础部分]

    Python 是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。输出方式:print “Hello world”
    空值是Python里一个特殊的值,用None表示。
    关于除法运算:默认只取整数部分的结果:1/2=0.要得到小数:1.0/2 或者 1.0/2.0
    幂(乘方)运算:2 ** 4 = 16 表示 2的4次方。
    关于长整型数:普通整数不能大于 2147483647也不能小于 -2147483648 ,否则要加L。虚数:用j或者J表示
    变量名可以包括字母、数字、下划线,不能以数字开头(同PHP)。
    print 语句 [Python3.0中 print是函数,要写print(42)而不是 print 42 ]:
    获取用户输入: input(‘words’);
    使用 import 导入模块,用“模块.函数”调用:
    使用 “from 模块 import 函数”可以直接使用;也可以 foo=math.sqrt赋值,然后 foo(4)得到平方根。
    将Python值 转换为 字符串 的三种方法:str 、 repr 、 反引号(``) 。
    在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。如果要表示多行字符串,可以用'''...''’表示。
    以Unicode表示的字符串用u'...'表示,比如:print u’中文’,注意: 不加 u ,中文就不能正常显示。
    自定义一个求绝对值的函数:def my_abs(x): if x >= 0: return x else: return -x
    return None可以简写为return
    从模块导入函数,可以使用:① import module ② from module import function ③ from module import *
    还可以在语句末尾增加一个as子句: import math as foobar ; foobar.sqrt(4); ===> 结果是 2.0
    也可以为函数提供别名: from math import sqrt as foobar ; foobar(4); ===> 结果是 2.0
    一次性给多个变量赋值:x,y,z = 1,2,3
    链式赋值,将同一个值赋给多个变量: x = y =somefunction()
    如果希望执行普通的除法,在程序前面加上: from __future__ import division
    使用 import 导入模块,用“模块.函数”调用: import math; math.floor(32.9);
    使用 “from 模块 import 函数”可以直接使用:from math import floor; floor(32.9);
     
    [数据类型]
    Python中基本的数据结构是“序列”。序列分为6种,最主要的两种类型是“列表”和“元组”,其他的序列:字符串、Unicode字符串、buffer对象、xrange对象。
    几乎所有的情况下,列表都可以替代元组;除了 在使用元组作为字典的键,此时因为键不可修改,所以不能使用列表。
    对序列的操作:索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)、计算长度、找出最大元素和最小元素、迭代(对序列中的每个元素重复执行某些操作)。
    (1)索引:可以通过索引获取元素。-1表示从右边取值。
    (2)分片:获取一定范围内的序列(或者字符串),用冒号(:) 分割start和end的范围,例如 tag[1:6]
    (3)分片:更大的步长。例如:每隔2取一个数;每隔3取一个数。
    (4)序列相加(连接):必须是相同类型的序列才能连接在一起,用 + 符号连接。
    (5)序列的乘法,用 * 符号连接:
    (6)检查一个值是否在序列中用in ,返回布尔。
    (7)序列的:长度 len()、最小值min()、最大值max()。
     
    列表:
    list是一种有序的集合,可以随时添加和删除其中的元素。用[]把list的所有元素都括起来,就是一个list对象。
    x = ['Adam', 'Lisa', 'Bart’] 正序打印 L[0],倒序打印 L[-1]
    列表方法这样调用: 对象.方法(参数)
    count()方法 统计某个元素在列表中出现的次数: x.count(y)
    index()方法 从列表中找出某个值第一个匹配项的索引位置: x.index('value')
    append()方法 把新的元素添加到 list 的尾部 x.append(y)
    insert()方法 把新元素添加到 list 的指定位置 x.insert(1,'xyz')
    pop()方法 删除最后一个元素 x.pop(),删除指定位置的元素 x.pop(1)
    remove()方法 移除列表中某个值的第一个匹配项 x.remove('value')
    reverse()方法 将列表中的元素翻转 x.reverse()
    sort()方法 对列表排序 x.sort()
    高级排序compare(x,y): x<y返回负数,x>y返回正数,x=y返回0。
     
    元组:
    tuple是不可变的集合:
    t = ('Adam', 'Lisa', 'Bart')
    空tuple:t = (),单元素tuple,直接使用t = (1),会输出 1;
    Python 规定,单元素 tuple 要多加一个逗号”,":t = (1,)
    基本的元组操作:除了创建和访问之外,没有其他太多操作。
     
    字符串:
    都是不可变的。字符串格式化的操作符(%)
    例如:格式化浮点数,使用如下方式: %.3f
    字符串方法:
    (1) find方法:在一个较长的字符串中查找子字符串,返回子串所在位置的最左端索引,若没找到则返回-1.
    x.find(‘y’, start, end) 表示在start和end之间查找。
    (2) join 方法:在队列中添加元素,需要添加的队列元素都必须是字符串。
    (3) split方法:分割字符串,和join相反。
    (4) lower方法:将字符串转换为小写
    (5) replace方法:替换字符串
    (6) strip方法:去除两侧的空格。
     
    映射:
    通过键引用值的数据结构,字典是Python中唯一内建的映射类型。
    个人理解:Python中的“字典”就像是PHP中的“数组”,或者“json”,就是一个一个的键值对。
    创建字典
    phonebook = {'zhang':'111', 'wang':'222', 'zhao':'333'}
    也可以用用dict函数建立字典:
    item = [('name','rx'),('age',27)]
    d = dict(item)
    字典的操作,与“序列”很类似:
    (1)字典的键不一定是整数类型,可以是任何不可变的类型(比如:浮点型、字符串、元组)
    (2)字典可以自动添加(类似PHP的数组)
    (3)表达式 k in d(d为字典)查找的是键 而不是值,表达式 v in l(l为列表) 查找的是值 而不是索引。
    字典方法:
    (1)clear方法:清除字典中所有的项,无返回值。
    (2)copy方法:返回一个具有相同 key-value 的新字典。
    (3)fromkeys方法:使用给定的key建立新的字典,每个key默认对应的value为None。
    (4)get方法:一般情况下,访问字典中不存在的项时会出错,但使用get就不会:
    (5)has_key方法:检查字典中是否包含给出的key,返回布尔。表达式 d.has_key(k) 相当于 k in d.
    (6)items 和 iteritems:将所有的字典项以列表方式返回,但返回时没有特殊的顺序。
    (7)keys 和 iterkeys:keys方法将字典中的键以列表的形式返回,iteritems方法返回针对键的迭代器。
    (8)pop方法:获得对应于给定键的值,然后将这个key-value从字典中移除。
    (9)popitem方法:弹出列表中的随机的项。
    (10)setdefault方法:类似get方法。能够获得与给定键相关联的值,还能在字典中不含有给定键的情况下设定相应的键值。
    (11)update方法:利用一个字典项更新另外一个字典。提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖。
    (12)values 和 itervalues:以列表的形式返回字典中的值(itervalues返回值的迭代器)。与返回键的列表不同的是,返回值的列表中可以包含重复的元素。
     
    [条件判断和循环]
    Python中,用冒号(:) 标识语句块的开始,块中的每一个语句都是缩进的,当回退到和已经闭合的块一样的缩进量时,表示当前块结束。
    下列值在布尔类型中都表示false:False、None、0、""、()、[]、{} ,其他的则为true。
    使用bool函数可以将其他类型转换为布尔:bool('hello') --> True
    if ... else ... elif 语句
    x is y : 判断x和y是否是同一个对象,注意和 == 对比:
    使用 == 判定两个对象是否相等,使用is判定两个对象是否等同(是否是同一个对象)。
    in成员资格运算符:
    if 'x' in 'xyz':
    print True
    else:
    print False
    且/或/非: and/or/not
    三元运算符: a if b else c :如果b为真则返回a,否则返回c。
     
    while循环:
    判断用户是否输入了名字:
    while not name or name.isspace()
    for循环
    说明:如果能使用for循环,则尽量不要使用while循环。
    words = ['a','b','c','d']
    for x in words:
    print x
    range的使用(类似于分片):
    range(0.3) --> [0,1,2]
    循环遍历字典元素:
    d = {'x':1,'y':2,'z':3}
    for key in d:
    print key,'--->',d[key]
    跳出循环:break 和 continue
    另外三个语句:pass、 del、 exec
    (1)Python中空代码块是非法的,所以需要在语句块中加上pass:
    (2)del语句:移除对象。
    (3)exec:执行一个字符串。
    (4)eval:用于“求值”—— 会计算Python表达式并且返回结果值。
     
    [抽象]
    内建的callable函数可以判断函数是否可调用
    定义函数:def语句,可以设置默认值,可以没有return:
    def test(name='default',age=20):
    return 'Hello' + name + age
    print test('renxing',29)
     
    函数的参数中定义元组,需要加*号:
    def test(title,*params):
    print title
    print params
    test('hello:','a','b','c')
     
    函数的参数中定义字典,加**号:
    def test(**params):
    print params
    test(x=1,y=2,z=3)
    结果:{'y': 2, 'x': 1, 'z': 3}
     
     
    作用域——内建的vars函数
    函数内的变量称为局部变量,全局变量用global表示。
    函数可以嵌套:
    def foo():
    def bar():
    print “Hello_world”
     
    常用函数整理:
    pow(num) 乘方
    abs(num) 绝对值
    round(num) 四舍五入
    help() 提供交互式帮助
    input(prompt) 获取用户输入
    raw_input(prompt) 获取用户输入,返回的类型是 字符串
    repr(object) 返回值的字符串表示形式
    str(object) 将值转换为字符串
     
    [类和对象]
    面向对象的三大特性:继承、封装、多态。
    创建类:
    class Person:
    def setName(self,name):
    self.name = name
    def getName(self):
    return self.name
    调用:
    foo = Person()
    foo.setName('renxing')
    print foo.getName()
     
    Python并不直接支持私有方式,为了让方法或者特性变为私有(从外部无法访问),只要在函数名前面加上双下划线即可:
    class Person:
    def __getName():
    print 'private function'
     
    如果要查看一个类是否是另一个类的子类,使用内建的 issubclass 函数
    如果想要知道已知类的基类,可以使用它的特殊特性: __bases__
    同样,还能使用 isinstance 方法检查一个对象是否是一个类的实例
    如果只想知道一个对象属于哪个类,可以使用 __class__ 特性
    __bases__ 复数形式说明了 它的基类可能会多于一个,称为:多重继承。
     
    接口和内省:
    让对象符合当前的接口,也就是实现当前的方法
    与 getattr 相对应的函数是: setattr,用来设置对象的特性
    如果要查看对象内所有存储的值,可以使用 __dict__ 特性。
     
    魔术方法: __future__ 、__init__ 、 __iter__
    构造方法: __init__
    析构方法: __del__
     
    序列和映射 是对象的集合。如果对象是不可变的,那么需要使用两个魔法方法,如果是可变的则需要使用4个。
    __len__(self): 返回集合中所含项目的数量。
    __getitem__(self,key): 返回与所给键对应的值。
    __setitem__(self,key,value): 按一定的方式存储和key相关的value(只能为可以修改的对象定义这个方法)。
    __delitem__(self,key): 此方法在对一部分对象使用del语句时被调用,同时必须删除和元素相关的键。
     
    当子类化一个内建类型(如list)的时候,就会间接地将object子类化,就会自动成为新式类,可以使用像super函数这样的特性了。
    访问器方法——能够使用getHeight、setHeight这样的名字重绑定一些特性。
     
    property 函数
    静态方法: @staticmethod ;类成员方法: @classmethod
     
    迭代器 __iter__,
    具有next方法,不需要任何参数。
    (1) 一个实现了 __iter__ 方法饿的对象是可迭代的,一个实现了next方法的对象是迭代器。
    (2) 内建函数 iter 可以从可迭代的对象中获得迭代器。
    (3) 使用list构造方法可以显式地将迭代器转化为列表
    生成器是一种用普通的函数语法定义的迭代器。生成器是一个包含yield关键字的函数。
     
    基本上就是另外一类模块,而且能包含其他模块。当模块存储在文件中时(扩展名.py),包 就是模块所在的目录。 __init__py文件。
    例如有个名为 constants的包,文件 constant/__init__.py包括语句 PI=3.14,那么可以:
    import constants;
    print constants.PI;
    __all__ 变量:
    help() 函数:例如 help(copy);
    标准库: sys 模块能够访问与Python解释器联系紧密的变量和函数。使用方法:sys.argv;sys.exit;
    os模块提供了访问多个操作系统服务的功能。os和它的子模块os.path还包括一些用于检查、构造、删除目录和文件的函数。
    fileinput 模块——能够遍历文本文件的所有行。
     
    [集合]
    使用set创建集合:
    set(range(5)) --> set([0,1,2,3,4])
    集合元素是无顺序的:
    set(['a','b','c']) --> set(['c','a','b'])
    计算两个集合的并集,使用union方法,或者 | 运算符。
     
    [堆]
    堆 是“优先队列”的一种,使用优先队列能够以任意顺序增加对象,并且能在任何时间找到最小的元素。
    Python中只有一个包含一些堆操作函数 的模块,叫做 heapq,包含6个函数。
    (1)heappush 函数 用于增加堆的项,只能用于通过各种堆函数建立的列表中。
    (2)heappop 函数 弹出最小的元素。
    (3)heapify 函数 使用任意列表作为参数,并且通过尽可能少的移位操作,将其转换为合法的堆。
    (4)heapreplace 函数 弹出堆的最小元素,并且将新元素推入,这样比 调用heappop之后再调用heappush更高效。
     
    [双端队列] deque
    双端队列——在需要按照元素增加的顺序来移除元素时非常有用。
    双端队列通过可迭代对象(比如集合)创建。
     
    [time]
    time 模块所包含的函数能够实现以下功能:
    获得当前时间、操作时间和日期、从字符串读取时间以及格式化时间为字符串。
    time.asctime() 将当前时间格式化为字符串
     
    [random]
    random模块包括返回随机数的函数。
     
    [shelve]
    shelve是一额简单的数据存储方案,他只有一个函数就是open(),
    这个函数接收一个参数就是文件名,然后返回一个shelf对象,
    你可以用他来存储东西,就可以简单的把他当作一个字典,
    当你存储完毕的时候,就调用close函数来关闭。
     
    【文件和素材】
    打开文件用open函数,参数'rb'可以用来读取一个二进制文件。
    使用f.write(string) 追加写入,使用 f.read() 读取,使用f.close() 关闭文件。
    f.readlines() 读取一个文件的所有行,f.readline() 读取一行。
    按行操作——在while循环中使用readline。
    用readlines 迭代行:
    使用 fileinput 实现懒惰行迭代:
    可以对文件迭代器执行和普通迭代器相同的操作。比如将它们转换为字符串列表,使用 list(open(filename)); 这样和使用readlines 效果一样。
     
    【图形用户界面 GUI 】
    最成熟的跨平台Python GUI工具包—— wxPython
     
    【安装MySQL-python】
    要想使python可以操作mysql 就需要MySQL-python驱动,它是python 操作mysql必不可少的模块。
    检查MySQLdb 模块是否可以正常导入:import MySQLdb
    python 操作mysql数据库基础:
    #coding=utf-8
    import MySQLdb
     
    #Connect() 方法用于创建数据库的连接,里面可以指定参数:用户名,密码,主机等信息。
    #这只是连接到了数据库,要想操作数据库需要创建游标。
    conn= MySQLdb.connect(
    host='localhost',
    port = 3306,
    user='root',
    passwd='',
    db ='rxpython',
    )
     
    #通过获取到的数据库连接conn下的cursor()方法来创建游标。
    #通过游标cur 操作execute()方法可以写入纯sql语句。
    #通过execute()方法中写如sql语句来对数据进行操作。
    cur = conn.cursor()
     
    #创建数据表
    cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")
    #插入一条数据
    cur.execute("insert into student values('2','Tom','3 year 2 class','9')")
    #修改查询条件的数据
    cur.execute("update student set class='3 year 1 class' where name = 'Tom'")
    #删除查询条件的数据
    cur.execute("delete from student where age='9'")
    #关闭游标
    cur.close()
    #提交事务
    conn.commit()
    #关闭数据库连接
    conn.close()
     
    一次性向数据表中插入多条值:
    executemany() 方法可以一次插入多条值,执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数。
    sqli = "insert into student values(%s,%s,%s,%s)"
    cur.executemany(sqli,[
    ('11','zhang','aaaaa','1001'),
    ('12','wang','bbbbb','1002'),
    ('13','li','ccccc','1003'),
    ('14','zhao','ddddd','1004'),
    ])
     
    查询语句:
    (1)aa=cur.execute("select * from student"); print aa;
    ----> 获得的只是表中有多少条数据。
    (2)fetchone() 方法可以获得表中的数据,可是每执行一次,游标会从表中的第一条数据移动到下一条数据的位置。
    scroll(0,'absolute') 方法可以将游标定位到表中的第一条数据。
    (3)获得表中的多条数据并打印出来,使用 fetchmany()
     
  • 相关阅读:
    URAL1996 Cipher Message 3(KMP + FFT)
    UVa12633 Super Rooks on Chessboard(容斥 + FFT)
    SPOJ TSUM Triple Sums(FFT + 容斥)
    UVa12298 Super Poker II(母函数 + FFT)
    LA4671 K-neighbor substrings(FFT + 字符串Hash)
    HDU4080 Stammering Aliens(二分 + 后缀数组)
    HDU4609 3-idiots(母函数 + FFT)
    HDU1402 A * B Problem Plus(FFT)
    快速傅里叶变换FFT学习小记
    HDU4971 A simple brute force problem.(强连通分量缩点 + 最大权闭合子图)
  • 原文地址:https://www.cnblogs.com/rxbook/p/10912752.html
Copyright © 2020-2023  润新知