python入门(1)

Python是通过python解释器执行的。

1.第一个python程序

print "hello world" # 存为hello.py文件

如何运行?在命令行下执行python hello.py执行即可。

2.变量和算数表达式

principal = 1000                         # python是弱类型语言,变量声明之前不用指定类型
rate = 0.5
numyears = 5
year = 1
while year <= numyears:                  # :一般代表一个新代码块的开始
    principal = principal * (1 + rate)   #python中一般以四个空格缩进来定义一个新代码块
    print year, principal                # 使用print输出一行,多个变量之间使用,隔开
    year += 1

python中可以格式化输出变量

 print "%3d  %0.2f" % (year, principal)
 print "%s"  % "hello world"

%d代表输出整数,%s代表输出字符串,%f代表输出浮点数 此外还可以指定输出变量的宽度

例如0.2f 表示小数点之后保留两位小数。%3d代表整数宽度为3,右对齐

3.条件控制语句

a = 1
b = 2
if a < b:
    print "a < b"
else:
    print "a > b"
# 多个分支判断 用if elif else
if suffix == ".html":
    content = "text/html"
elif suffix == ".jpeg":
    content = "image/jpeg"
elif suffix == ".png":
    content = "image/png"
else:
    print "Unknown type"
print content
# 使用in来判断一个值包含在一个对象(字符串 列表 字典 )中
str = "hello world"
if "he" in str:
    has_he = True
else:
    has_he = False
print has_he

4.文件的输入输出

f = open("1.txt")  #打开一个文件,返回一个文件对象
line = f.readline() #读取一行内容
while line:
    print line, #读取一行内容 ,用于将line末尾的换行符去掉,因为print打印的时候默认在末尾添加一个换行符
    line = f.readline()
f.close() #关闭文件
# 遍历一个数据的集合的过程称为迭代,python提供了for来进行迭代 ,可以这样说,凡是可以迭代的
对象都可以使用for 进行迭代,上面的程序也可以改写为
for line in open("1.txt"):
    print line,
# 向一个文件中写数据
f = open("1.txt",‘w‘); # w代表使用写方式打开文件
f.write("hello world")
f.close()

# 从python解释器的标准输入输出流中读取数据
name = raw_input("input your name:")

5.字符串

python中的字符串可以使用‘‘ ""  ‘‘‘‘‘‘括起来进行表示

不同于‘‘ "" 使用三引号括起来的字符串可以保留了字符串的格式,而单引号 双引号默认都是在一行上的。

str = ‘‘‘hello world
    I am a good student
I love python‘‘‘
print str

在python中,字符串作为字符组成的列表(索引从0开始)使用索引可以提取python的单个字符

str = "hello world"
print str[1] # e

如果提取一个子字符串,可以使用切片

str = "01234567"
str = "01234567"
str1 = str[0:4] #包含开头,不包含结尾
str2 = str[1:]
str3 = str[:]
print str1  #0123
print str2  #1234567
print str3  #01234567

使用加号,可以连接两个字符串

print str + "89" # 0123456789

就像php perl一样,python从来不将数字字符串隐式解释为数字,如果要进行数字运算必须进行强转

num1 = "12"
num2 = "23"
print int(num1) + int(num2)

非字符串类型的数据可以使用str()转为字符串

num = 213
num_str = str(num)

format用于将一个值格式化某种格式的字符串

format(9.8,"0.5f") # 9.80000

通过一个字符串split(delimiter)方法可以根据指定的分隔符,将一个字符串分为一个字符串列表

str = "pear,apple,orange"
fruit = str.split(",")  ["pear","apple","orange"]

6.列表 python中的列表是任意对象组成的序列

names = ["joe", "sam", "tom"]

列表可以通过数字来索引,索引从0开始

print names[0] # joe
names[0] = "jeff" #将names的第一个元素改为jeff
names.append("lam") #将lam添加到列表的末尾 ["jeff","sam","tom", "lam"]
names.insert(2,"han") #在指定位置添加一个元素 ["jeff","sam","han","tom", "lam"]

可以使用切片来对列表进行复制,原理同字符串的操作

使用加号来连接两个列表

a = [1,2,3] + [4,5] # [1,2,3,4,5]

创建一个空链表

a = []  # 或者a = list()

列表里面还可以包含列表 类似于二维数组

li = [[1,2],[3,4,5]]
print li[1][2]  # 5

通过下面的程序我们来了解列表的一些高级特性

import sys                              #导入sys模块,用来获取命令行参数
if len(sys.argv) != 2:
    print "please supply a filename"
    raise SystemExit(1)
file = open(sys.argv[1])
lines = file.readlines()                #读取所有行,返回一个字符串列表
file.close()

fvalues = [float(line) for line in lines] #通过遍历列表 生成一个浮点数列表python comprehension
print "the max of the values", max(fvalues)
print "the min of the values", min(fvalues) # 通过内建的函数返回列表中的最大值,最小值

列表对象提供了很多有用的方法,刚兴趣的可以自行查看python api

7.元组 tuple

元组即不可变的列表 通过元组可以构建一些简单的数据结构

address = (" 80 )
person = (first_name, second_name, age)
stock = "GOOG", 10, 90.9  #创建元组的时候,小括号可以省略
a = ()  #创建一个空元组
b = (1,) #创建一个元素的元组 注意,小括号不能省略
first_name, second_name, age = person #可以通过unpack一个元组同时来给多个变量复制 
print person[1] #当然,也可以通过索引来获得元组元素的值 second_name

注意:元组在创建之后,元组的元素内容是不可以改变的。

在实际的编程中,如果需要创建许多的小列表的话,会消耗大量内存。为了使得list添加元素效率更高,通常创建一个列表在分配内存时候,会稍微比实际大小多分配一些内存。而元组则不会出现这种情况。

如果一个列表的元素是元祖的话,一种简单的遍历方式

stock = [("baidu",10,100.2), ("google",90,12.4), ("sina", 80, 124.5)]
for name, amount, price in stock:
    print name, amount, price

8.集合 set

集合通常用来存放 无序 的对象集合

如何创建一个集合 使用set(),并且传入一个列表

 s = set([1, 2, 3, 4])
 s = set("hello")

由于集合是无序的,所以不能使用索引来获取元素 此外 集合元素的值是不能重复的 比如上图的hello

实际创建的集合中只含有一个l

集合可以进行集合间的运算 交集 合集 差集 对称差集

a = set([1, 2])
b = set([2, 3])
print a & b # both in a and b
print a | b # a and b
print a - b # in a but not in b
print a ^ b # in a or in b but not both

对集合中的元素进行操作

a.add(4)  # 向集合中添加一个元素
a.update([5, 6, 7]) # 通过添加多个元素
a.remove(3) # 移除一个元素

9.字典 dictionary

python的字典可以

理解为数据结构中的哈希表,即键值对的集合。

stock = {
    "name": "baidu",
    "amount": 100
    "price": 23.2
}

对字典进行操作

stock["name"] = "google"  #更新字典的值
stock["date"] = "2016-09-28"  #新添加一个项

python的字典通常使用字符串(也可以使用数字,或者元组)作为键,字典的键必须是不可变对象,列表和字典不可以作为键,因为它们的内容是可以改变的。

字典可以作为查找无序数据的容器,并且查找速度很高。

定义一个空字典

stock = {} # 或者 stock = dict()

判断字典中是否存在某个键

price = { 
    "apple": 10, 
    "pear": 12, 
    "peach": 23, 
    "tomato": 24
}
if "apple" in price:
    print price["apple"]
else:
    print "no apple"
# 上面的代码可以用以下一行代码来代替
print price.get("apple", 0.0) # 如果"apple"存在则返回price["apple"],否则返回0.0

获取字典的所有键

keys = list(price)

删除字典中的某个元素

del price["apple"]

10.循环和迭代 looping and iteration

python中用的最多的循环语句就是for 迭代通常用于遍历一个集合(set list tuple dictionary)中的所有元素 例如

for i in [1,2,3,4,5]:
    print i
# 或者
for i in range(1,6): #包含开头不包含结尾
    print i

range()用来返回一个列表

range 函数的常用用法

range(1,4) # [1, 2, 3]
range(5) # [0, 1, 2, 3, 4]
range(0,12,3) # 3为步长 生成的列表为[0, 3, 6, 9] 注意,不包含12
range(5, 0, -1) # [5, 4, 3, 2, 1]

range()返回的列表会为元素分配全部内存,当生成一个很大的列表的时候,会很消耗内存,所以实际中当需要生成一个很大的列表的时候,通常会使用xrange()函数。

for语句可以用来遍历很多类型的对象(列表 元素 字典 字符串 文件)

str = "hello world"
for c in str:
    print c
# 遍历字典
for key in price:
    print key, price[key]
# 遍历文件的所有行
for line in open("1.txt"):
    print line

11 函数

定义一个函数

def remainder(a, b):
    c = a // b # 商
    d = a - b*c # 余数
    return (c, d)  # 借助元组可以返回多个值

调用函数

quotient, remainder = remainder(10, 3)

可以为函数的参数设置默认值

def connect(hostname, port, timeout = 300):
    pass
connect(" 80 ) # 当为参数设置默认值的时候,参数可以省略

定义在函数内部的变量的作用域是局部的,当函数返回的时候,变量即被销毁。如果想要在函数内部修改一个全局变量可以这样做

count = 0
def foo():
    global count
    count += 1
foo()
print count # 变为了2

12 生成器 generator

通过yield语句,函数可以生成一个结果的列表

如果一个函数使用了yield语句,那么这个函数叫做一个生成器,通过调用一个生成器函数可以返回一个对象,通过连续调用这个对象的next()函数,可以得到一个结果的列表

# generator.py
def countdown(n):
    print "counting down"
    while n > 0:
        yield n
        n -= 1

但是实际中,我们通常不会手动的调用next()函数,而是通过for来访问生成器返回的结果列表

for i in countdown(5):
    print i,  # 5 4 3 2 1

生成器在管道,数据流处理中很有用。例如下面的生成器函数模仿了linux中的tail -f 命令

tail -f 通常用来检测一个日志文件动态增长的过程。

import time
def tail(f):
    f.seek(0, 2) #将文件指针定位到文件尾部
    while True:
        line = f.readline()
        if not line:
            time.sleep(1)
            continue
        yield line
# 下面这个生成器用来检查字符串列表中是否含有某个关键字
def grep(lines, searchtext):
    for line in lines:
        if searchtext in line:
            yield line
# 接下来通过把两个生成器结合起来,动态监测access.log生成的信息中是否含有python关键字
wwwlog = tail(open("access.log"))
pylines = grep(wwwlog, "python")
for line in pylines:
    print line

13 协同程序 coroutines

通常函数通过接受一系列单一固定的参数来执行,此外函数还可以作为一个进程通过动态接受传递(没传递参数之前这个进程是阻塞的)给他的参数来执行 这种函数被称为协同程序,通过表达式(yield)来实现

# coroutine.py
def print_matches(matchtext):
    print "looking for", matchtext
    while True:
        line = (yield) # 等待接受参数
        if matchtext in line:
            print line

接下来我们首先通过next()第一次调用这个函数,此时函数阻塞在yield处,此时我们通过send来向函数传递参数,此时函数往下执行之后,又一次阻塞到yield处,继续等待send参数来

协同程序在写基于生产者消费者并发程序的时候很有用。我们这里的程序很明显是作为消费者(“消费”数据)

下面这个例子将生成器与协同程序结合起来

matchers = [
    print_matches("python"),
    print_matches("jython"),
    print_matches("java")
]
for matcher in matchers:
    matcher.next()
wwwlog = tail(open("access.log"))
for line in wwwlog:
    for m in matchers:
        m.send(line)

14 对象和类

在一个程序中用到的所有的值被称为对象 一个对象包括其内部数据和操作数据的方法 例如我们前面已经看到了string和list对象的很多方法。

使用dir函数可以看到一个对象的所有方法

类用于定义一类对象

class Stack(object):  # object是所有类的基类
    def __init__(self): #注意,所有的对类的数据操作的时候,必须使用self.引用
        self.stack = []  # __init__方法用于初始化类对象,类似于C++ Java里的构造函数
    def push(self, object):
        self.stack.append(object)
    def pop(self):
        return self.stack.pop()
        return self.stack.pop()
s = Stack()   # 新建一个类的对象
s.push("hanguodong")
s.push("bullshit")
s.push([1, 2, 3])
top = s.pop()
print top  # [1, 2, 3]
top = s.pop()
print top # bullshit

由于栈跟python内建的list很相似 因此可以直接通过继承list来实现Stack类

class Stack(list):
    def push(self,object):
        self.append(object)

一般来说,在一个类内定义的方法,一般适用于那个类的对象 我们也可以通过装饰器(decorator)来修饰定义C++或者Java里的静态方法

class EventHandler(object):
    @staticmethod
    def dispatcherThread(self):  #静态方法
        while True:
            # wait for requests
            pass
EventHandler.dispatchThread()  # 直接通过类名就可以调用静态方法,不是实例化一个对象。

15 异常 Exception

如果python程序出现错误,将会抛出一个异常,然后打印处堆栈信息。

堆栈信息通常会打印处出错的位置和错误的类型

我们可以通过try except语句来捕获异常进而进行处理

try:
    f = open("text.txt", "r")
except IOError as e:
    print e

当出现IOError的时候,错误的详细信息会传递给e,然后交由except块处理

如果没有异常的话,except代码块则会被忽略

raise语句用于手动抛出一个异常

raise RuntimeError("go to hell")

当然我们也可以通过继承exception类来自定义自己的异常

此外如果涉及到系统资源(锁,文件,网络连接等)的异常处理的时候,使用with语句可以简化异常的处理 例如

import threading
message_lock = threading.Lock()
pass 
with message_lock:
    messages.add(message)

当程序执行到with语句的时候,程序获得锁,执行完with语句块之后,则释放锁。如果异常发生的话,当控制离开上下文代码块之后,锁被释放掉。

with语句一般用于系统资源的管理(锁,文件,网络连接) 而用户可以通过上下文管理协议来自定义自己的处理过程。

16 模块 module

模块即一个python文件,通过import这个python文件,我们可以使用这个.py文件里面的变量,函数,类等等。例如

# div.py
def division(a, b):
    return a // b

如果导入一个模块。主要有三种方式

  1. import div # 注意,不要加.py后缀

a = div.division(10, 4)

2. from div import division

a = division(10, 3)

3. from div import *

a = division(12, 5)

17如何获取帮助

查阅api文档

时间: 2024-12-23 08:21:53

python入门(1)的相关文章

Python入门

Python入门教程(个人日常学习记录,有不妥之处欢迎指正!后续更新,敬请期待...) 学习地址:http://www.imooc.com/learn/177 Python中数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型有以下几种: 一.整数 Python可以处理任意大小的整数,当然包括

Python 入门基础学习

Python入门学习 我们使用python3.0版本 首选来入门  带你进入Hello World >>> print ("Hello World")Hello World 好了 我们会python了  呵呵了 我们来实现个简单的列子吧  文字游戏 print('------------我爱九月天---------------') temp = input("不妨猜一下九月天在你心里你会想的是哪个数字:") guess = int(temp) if

python入门学习课程推荐

最近在学习自动化,学习过程中,越来越发现coding能力的重要性,不会coding,基本不能开展自动化测试(自动化工具只是辅助). 故:痛定思痛,先花2个星期将python基础知识学习后,再进入自动化的学习. 现推荐几个学习python基础知识的途径: 1.<笨办法学python>(第三版),从头到尾一个字一个字的照着程序敲: 2.慕课网<python入门>课程: 3.网易云课堂<疯狂的python>公开课. 4.<廖雪峰Python3>pdf文件. 这也是

《Python入门》第一个Python Web程序——简单的Web服务器

上一篇讲了<Python入门>Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序--简单的Web服务器. 与其它Web后端语言不同,Python语言需要自己编写Web服务器. 如果你使用一些现有的框架的话,可以省略这一步: 如果你使用Python CGI编程的话,也可以省略这一步: 用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录

问道python之基础篇【二】python入门

问道python之基础篇[二] Python入门 1.python的工作过程 python解释器把源代码转换为字节码的中间形式,然后再把它翻译成机器使用的机器语言并运行. 2.pyc文件 2.1.什么是pyc文件 执行python代码时,如果导入了其他的.py文件,那么在执行过程中会自动生成一个与其同名的.pyc文件,该文件就是python解释器编译之后产生的字节码. ps:代码经过编译可以产生字节码:字节码通过反编译也可以得到代码. Pyc文件一般由3个部分组成: 最开始4个字节是一个Maig

Python入门之中文乱码

python入门编码: Python 文件中如果未指定编码,有中文代码时候,在执行过程会出现报错: File "test.py", line 2 SyntaxError: Non-ASCII character '\xe4' in file test.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details Python中默认的编码格式是 ASCII

visual studio 2015 搭建python开发环境,python入门到精通[三]

在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo,这里略带一句,其实就"学习python"而言,比较建议使用pycharm,pycharm可以设置VS或者eclipse等多种IDE的编码,可以让绝大部分其他语言使用IDE的习惯者更容易上手.这一点兼容确实做的很好.不过既然这么多园友要求使用vs开发python的话,就介绍一下visual

Python入门篇之列表

一.声明 本教程所使用的是Python版本是3.4.2. 二.Python列表介绍 Python列表(List)使用简单而且功能强大,其具有很好的可伸缩性,为开发者编程提供了巨大的便利. [列表变量声明] 列表变量的声明和C语言中声明数组的方式差不多.下图中声明了一个名为 list 的列表变量. [列表元素的索引方式] 笔者在<Python入门篇之字符串使用>一文中介绍过字符串中字符的索引方式.列表元素的索引方式和字符串字符的索引方式是一样的,都是根据元素间隙位置来切割出元素内容.下面做详细说

《Python入门》Linux 下 Python Web开发环境搭建笔记

之前写过 Windows 7下Python Web开发环境搭建笔记,今天写一下在Linux系统下搭建Python Web的开发测试环境. 我使用的系统是:ubuntu 14.04 server,根据个人经验,CentOS 6.5 下也适用. 关于Python的版本 进入Python的网站,鼠标移到导航条上的下载,我们会发现提供两下主版本的下载链接! 这两个之间存在什么差别呢? 个人理解,2.7.x的版本为更加稳定的版本,而3.x的版本则是比较前卫的版本,包含了很多新功能新特性之类的: 但如果想要

Python基本语法[二],python入门到精通[四]

在上一篇博客Python基本语法,python入门到精通[二]已经为大家简单介绍了一下python的基本语法,上一篇博客的基本语法只是一个预览版的,目的是让大家对python的基本语法有个大概的了解.之所以将python的基本语法分为两部分,是因为园子里大部分人都是有编程基础的,所以在学习Python的时候可以先出个预览版的,预览版都是根据Python的语法与其他语言(java/C#/php)比较类似又不完全一样的地方,便于大家对Python有个基本理解.在大家差不多有个了解以后,我们再深入讲讲