码迷,mamicode.com
首页 > 编程语言 > 详细

VII python(1)基础知识

时间:2016-05-09 07:17:01      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:python

VII Python1)基础知识

 

1989年诞生(同LinuxOS),google推崇,06年后才开始在中国流行,08年运维开始使用python

www.python.org(主流OS默认配的python2.62.7,最好在Ubuntu12.10上使用python,对于开发很方便,否则会浪费很多时间在装某一软件包)

https://www.python.org/ftp/python/

Python(简单、容易上手、语法非常简明,任何功能都可实现;胶水语言,粘合剂,能与任何语言结合起来(如javaphpperl等)互相调用)

Python3.3(加入新功能,仅简单语法有变化整体90%以上同2.72.63.32.7的过渡能识别2.7的语法及功能)

Win上(pythonXYportable python可放在U盘到哪都能用)

模块,可以交互使用的一个代码段,或来自一个大规模的python程序,一旦导入一个模块就可引用它的任何的公共函数、类或属性(格式:>>>MODULE.FUNCTION,例如>>>sys.path

注:并非所有模块都保存为*.py文件,如内置模块sys是用C写的源代码不是python所以不是.py文件,sys是置于python内部的

注:perl古老的语言,在文字处理方面(正则)非常强大,语法复杂,不适合团队开发;

注:php,轻量级的web开发,php能实现的python都能实现,php在C/S架构方面并不擅长,而pythonserver方面非常强悍,在web方面python一点不比php差;

注:软件工程师(编程,软件开发,游戏、搜索、嵌入式、网站、C/S软件),系统工程师(用python管理系统,脚本、运维自动化工具);

注:shellpythonshell重在脚本方面,而python是语言,面向对象的语言,不止脚本方面

注:puppetruby)与python的外部框架类似

python中一切皆对象,字符串是对象,列表是对象,函数是对象,模块是对象,一切都可以赋值给变量或作为参数传递给函数,所有函数都有一个内置的__doc__属性,它会返回在函数源代码中定义的doc stringsys模块是一个对象,它有一个叫作path的属性等

代码块指:函数、if语句、for循环、while循环等等,代码块通过缩进来定义,缩进是python这种语言的要求而并非是一种风格

测试模块:if__name==”__main__”:(注:if语句表达式不需用括号()括起来,以冒号结束,随后是缩进)

python中向屏幕输出内容只用print即可,print语句可接受任何数据类型(字符串、整数、字典、列表等),甚至多种数据类型可混在一起输出到一行(各数据类型间用逗号分隔),显示在屏幕上时是用空格隔开的,逗号并不打印

Python中使用硬回车分割语句,冒号和缩进分割代码块;C++JAVA使用分号分割语句,花括号来分割代码块

模块是对象,所有模块都有一个内置属性__name__,一个模块的__name__的值要看具体如何应用模块,如果import模块,那__name__的值通常为模块的文件名(无路径和文件扩展名),如果像标准程序一样直接运行模块那__name__的值是一个特别的默认值__main__,了解到这一点,你可在模块内部为你的模块设计一个测试套件(加入if语句),当运行模块时__name__的值是__main__测试套件执行,当导入模块时__name__的值就是特别的东西了,测试套件被忽略,这样使得将新的模块集成到一个大程序之前开发和调试容易多了

 

[root@localhost ~]# uname -a

Linux localhost.localdomain 2.6.32-358.el6.x86_64#1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost ~]# python -V

Python 2.6.6

[root@localhost ~]# which python

/usr/bin/python

[root@localhost ~]# vim test.py

----------script start---------------

#!/usr/bin/env python

def buildConnectionString(params):

   """Build a connection string from a dictionary ofparameters.

Returnsstring."""

 

   return ";".join(["%s=%s" % (k, v) for k, v inparams.items()])

if __name__ == "__main__":

   myParams = {"server":"mpilgrim", \

               "database":"master", \

                "uid":"sa",\

               "pwd":"secret" \

               }

printbuildConnectionString(myParams)

---------------script end--------------

[root@localhost ~]# python test.py(使用python SCRIPT_NAME,即可运行python脚本)

pwd=secret;database=master;uid=sa;server=mpilgrim

[root@localhost ~]# python(进入python编辑器模式)

Python 2.6.6(r266:84292, Oct 12 2012, 14:23:48)

[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)]on linux2

Type "help","copyright", "credits" or "license" for moreinformation.

>>> 

>>> print ‘hello world‘

hello world

 

 

一、

Python编程风格:

1、语法要求:

缩进统一(shell中的循环语句有关闭符号(fidone),而python中无关闭符号,用缩进替代,敲两下回车即输入结束,程序从第二行开始之后的内容要统一格式,要么一个或两个或四个空格(TAB键默认4个空格),否则语法错误(incident error));

注:缩进在python中是语法要求而不是风格

变量(变量名由字母、数字、下划线组成,且第一个字符不能是数字(变量名的第一个字符必须是大写字母或小写字母或下划线(_);变量名的其它部分可由大小写字母或下划线或数字组成);变量名对大小写敏感,如mynamemyName是不同的变量)

注:python与大多数语言一样,有局部变量和全局变量之分,但无明显的变量声明,变量通过首次赋值产生,当超出作用范围时自动消亡

注:当一条命令用续行符\分割成多行时,后续的行可以以任何方式缩进,在()、[]{}中的表达式可用也可不用换行符,若使用换行符可使代码读起来更容易,这只是风格而已

注:python不允许引用一个未被赋值的变量,否则会引发异常,赋值时可一次赋多值,也可连续值赋值,具体看以下举例

格式化字符串(用%s)、格式化整数(用%d)、格式化浮点数(用%f),字符串格式化不仅是格式化,还是连接,也是强制类型转换

字符串连接用“+”符号

 

举例:

有效变量名(i_my_namename_23a1b2_c3

无效变量名(2thingsthis is spaced outmy-name

>>> name=‘jowin‘

>>> print name

jowin

>>> if name==‘jowin‘:(注意此句结尾是冒号)

...    print ‘hello‘,name(此处敲两下回车即输入结束)

...

hello jowin

 

(一次赋多值,此例v是一个三元素的tuple,(x,y,z)是一个三变量的tuple,将一个tuple赋值给另一个tuple,会按照先后顺序对应的赋给每个变量)

>>>v=("a","b","e") 

>>> v

(‘a‘, ‘b‘, ‘e‘)

>>> (x,y,z)=v

>>> x

‘a‘

>>> y

‘b‘

>>> z

‘e‘

 

(连续值赋值,内置的range函数返回连续的整数listrange的简化使用如range(7)接收一个上限值,返回一个初始值从0开始的list,依次递增但不包含上限值)

>>> range(7)

[0, 1, 2, 3, 4, 5, 6]

>>> range(1,8)

[1, 2, 3, 4, 5, 6, 7]

>>>(MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY)=range(1,8)  

>>> MONDAY

1

>>> SATURDAY

6

 

(整个表达式的计算结果为一个字符串,第一个%s被变量k的值替换,第二个%s被变量v的值替换,其它字符原样输出,(k,v)是一个tuple

>>> k="uid"

>>> v="sa"

>>> "%s=%s" % (k,v) 

‘uid=sa‘

 

字符串格式化与字符串连接比较

>>> uid="sa"

>>> pwd="secret"

>>> print pwd+"is not a good password for"+uid

secretis not a good password forsa

>>> print "%s is not a good password for %s" % (pwd,uid)  (此处字符串连接与字符串格式化结果一样)

secret is not a good password for sa

注:(userCount,)是一个只包含一个元素的tuple,显示的说明这是一个tuple而不是其它,当定义一个listdictionarytuple可以总是在最后一个元素后面跟上逗号,但要定义仅包含一个元素的tuple时逗号是必须的否则python不知道(userCount,)是包含一个元素的tuple还是变量userCount的值

>>> userCount=6

>>> print "Usersconnected:%d" % (userCount,)

Users connected:6

>>> print "Usersconnected:"+userCount   (将字符串与非字符串连接会产生异常)

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

TypeError: cannot concatenate ‘str‘ and‘int‘ objects

 

格式化浮点数,%f十进制浮点数,不指定精度时默认打印6位小数

>>> print "today‘s stockprice:%f" % 50.4625

today‘s stock price:50.462500

>>> print "today‘s stockprice:%.2f" %50.4625

today‘s stock price:50.46

>>> print "today‘s stockprice:%+.2f" %50.4625

today‘s stock price:+50.46

 

2、单引号(强引用)、双引号(弱引用)、三引号(’’’”””用于注释,可多行)

注:三引号用于注释(docstring),三引号的内容可包含多行字符串,在开始与结束间的所有东西都被视为单个字符串的一部分(包括硬回车和引号);三引号(doc string)可用于提供上下文敏感文档信息,如键入一个函数名时,将显示提示信息,这会非常有用

注:在脚本中若注释一行在行首使用#,注释多行在开始和结尾处使用’’’”””

 

3、在编辑模式下,可直接用于计算

>>> 3 * 2 / 2(可在编辑模式下直接做算述运算,在shell下是用bc

3

>>> 88*2/2

88

>>> a=8

>>> b=6

>>> a>b

True

>>> a<b

False

>>> a!=b

True

 

4、赋值(用等号=赋值,用双等号==作判断)      

>>> User_name=‘jowin‘

>>> print User_name

jowin

>>> Age=27

>>> print Age

27

>>> Next_year_age=Age+1

>>> print Next_year_age

28

>>> name=chai(此句是把chai当作变量,变量chai之前没有赋过值,所以报错未定义)

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

NameError: name ‘chai‘ is not defined

>>> chai=‘hehe‘

>>> print chai

hehe

>>> print name

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

NameError: name ‘name‘ is not defined

>>> name=chai

>>> print name

hehe

 

5、函数声明以关键字def开始,后接函数名,()内为参数,多个参数用逗号分隔(param1,param2);

函数没有定义返回的数据类型,python不需要指定返回值的数据类型和返回值,每个python函数都有返回值,若函数执行过return语句则将返回指定的值,否则返回nonepython的空值);

Python中的参数不需指定数据类型,python会判断一个变量是什么类型,并在内部将其记录下来;

注:python既是动态类型定义语言(不用声明数据类型),又是强类型定义语言(一旦一个变量具有一个数据类型,实际上就一直是这个类型了)

 

 

二、

1

导入模块(导入程序块或包,python自带的有内置模块,若想要用其它功能就要导入其它模块,使用方法>>>importMODULE_NAME):

注:模块,可以交互使用的一个代码段,或来自一个大规模的python程序,一旦导入一个模块就可引用它的任何的公共函数、类或属性(格式:>>>MODULE.FUNCTION,例如>>>sys.path

>>> import sys(导入sys模块使得它的所有函数和属性都有效)

>>> sys.path(模块导入的搜索路径,列出路径,列出的是当前包含的目录,sys.path是一个组成当前搜索路径的目录列表,在导入模块时会按照此路径逐个搜索匹配的*.py文件)

[‘‘, ‘/usr/lib64/python26.zip‘,‘/usr/lib64/python2.6‘, ‘/usr/lib64/python2.6/plat-linux2‘,‘/usr/lib64/python2.6/lib-tk‘, ‘/usr/lib64/python2.6/lib-old‘,‘/usr/lib64/python2.6/lib-dynload‘, ‘/usr/lib64/python2.6/site-packages‘,‘/usr/lib64/python2.6/site-packages/gtk-2.0‘,‘/usr/lib/python2.6/site-packages‘,‘/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info‘]

注:并非所有模块都保存为*.py文件,如内置模块sys是用C写的源代码不是python所以不是.py文件,sys是置于python内部的

>>> help(sys)

>>> sys.path.append(‘/root‘)(自定义加入其它路径)

>>> sys.path

[‘‘, ‘/usr/lib64/python26.zip‘,‘/usr/lib64/python2.6‘, ‘/usr/lib64/python2.6/plat-linux2‘,‘/usr/lib64/python2.6/lib-tk‘, ‘/usr/lib64/python2.6/lib-old‘,‘/usr/lib64/python2.6/lib-dynload‘, ‘/usr/lib64/python2.6/site-packages‘,‘/usr/lib64/python2.6/site-packages/gtk-2.0‘,‘/usr/lib/python2.6/site-packages‘,‘/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info‘, ‘/root‘]

 

使用TAB补全功能:

[root@localhost ~]# vim tab.py

-------------script start---------------

#!/usr/bin/env python

# python startup file

import sys

import readline

import rlcompleter

import atexit

import os

# tab completion

readline.parse_and_bind(‘tab: complete‘)

# history file

histfile = os.path.join(os.environ[‘HOME‘],‘.pythonhistory‘)

try:

   readline.read_history_file(histfile)

except IOError:

   pass

atexit.register(readline.write_history_file,histfile)

del os, histfile, readline, rlcompleter

--------------script end----------------

[root@localhost ~]# python

>>> import sys

>>> import tab(此处只用写名字,无需写后缀.py,注意此处是当前路径,若此脚本在其它位置,要使用绝对路径)

>>> sys.<TAB>

sys.__class__(              sys.exitfunc(

sys.__delattr__(            sys.flags

sys.__dict__                sys.float_info

sys.__displayhook__(        sys.getc

……

 

>>> sys.version_info

(2, 6, 6, ‘final‘, 0)

>>> import os

>>> os.system(‘pwd‘)(调用shell命令)

/root

0

>>> from sys import path,version_info(直接使用pathversion_info,而不是sys.pathsys.version_info这样使用)

>>> path

[‘‘, ‘/usr/lib64/python26.zip‘,‘/usr/lib64/python2.6‘, ‘/usr/lib64/python2.6/plat-linux2‘,‘/usr/lib64/python2.6/lib-tk‘, ‘/usr/lib64/python2.6/lib-old‘,‘/usr/lib64/python2.6/lib-dynload‘, ‘/usr/lib64/python2.6/site-packages‘,‘/usr/lib64/python2.6/site-packages/gtk-2.0‘, ‘/usr/lib/python2.6/site-packages‘,‘/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info‘]

>>> version_info

(2, 6, 6, ‘final‘, 0)

>>> from os import system

>>> system(‘df -h‘)

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root

                      18G  2.4G   15G 15% /

tmpfs                 116M     0  116M   0% /dev/shm

/dev/sda1             485M   33M  427M  8% /boot

/dev/sr0              3.5G  3.5G    0 100% /mnt/cdrom

0

>>> import sys,os(导入多个模块,用逗号分隔)

>>> from sys import version_infoas v(若某个模块的属性很长,可定义别名来使用)

>>> v

(2, 6, 6, ‘final‘, 0)

 

 

2、内置数据类型:dictionary字典、list列表、tuple元组

dictionary定义键和值之间一对一的关系,python中的dictionaryperlhash哈希数组象java中的hashtable类的实例象vb中的scripting dictionary对象的实例,perl存储哈希值的变量是以%开头,在python中变量可任意取名并在python内部会记录下其数据类型

1)定义dictionary用{},此例有两个元素,将两元素赋值给变量d,元素间用逗号分隔,单个元素的keyvalue之间用冒号分隔且keyvalue本身用引号引起来,整个元素集合用大括号括起来

>>>d={"server":"mpilgrim","database":"master"}

>>> d

{‘database‘: ‘master‘, ‘server‘:‘mpilgrim‘}

2)引用一个key所对应的value通过d["server"],只能通过key引用value,不能通过value来获取key

>>> d["server"]

‘mpilgrim‘

>>> d["database"]

‘master‘

>>> d["mpilgrim"]

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

KeyError: ‘mpilgrim‘

3)修改dictionary通过d["server"]="qikai",若key存在则新value会覆盖之前的value,若key不存在则是新添加一个元素,一个dictionary中不能有相同的key,任何时候都可加入新的元素(key:value)这与修改存在的key:value是一样的

>>>d["server"]="qikai"

>>> d

{‘database‘: ‘master‘, ‘server‘: ‘qikai‘}

>>> d["server"]

‘qikai‘

>>>d["uid"]="sa"

>>> d

{‘database‘: ‘master‘, ‘uid‘: ‘sa‘,‘server‘: ‘qikai‘}

4dictionary中没有元素顺序的概念,只是序偶的简单排列,这是一个重要特性,dictionary中的key是大小写敏感的

>>>d["key"]="value"

>>> d["Key"]="othervalue"

>>> d

{‘Key‘: ‘other value‘, ‘database‘:‘master‘, ‘uid‘: ‘sa‘, ‘key‘: ‘value‘, ‘server‘: ‘qikai‘}

5dictionary中可混用数据类型,value可以是任意数据类型(字符串、整数、对象、甚至可以是其它的dictionary),在单个dictionarydictionaryvalue不需要全都是同一数据类型,可根据需要混用;dictionarykey要严格些可以是字符串、整数和几种其它类型(如tuple等)

>>> d["retrycount"]=3

>>> d["42"]="douglas"

>>> d

{‘key‘: ‘value‘, ‘uid‘: ‘sa‘, ‘database‘:‘master‘, ‘42‘: ‘douglas‘, ‘server‘: ‘qikai‘,‘Key‘: ‘other value‘, ‘retrycount‘: 3}

6)从dictionary中删除元素,del用于删除独立的元素,clear用于删除所有元素

>>> d

{‘key‘: ‘value‘, ‘uid‘: ‘sa‘, ‘database‘:‘master‘, ‘42‘: ‘douglas‘, ‘server‘: ‘qikai‘,‘Key‘: ‘other value‘, ‘retrycount‘: 3}

>>> del d["42"]

>>> d

{‘key‘: ‘value‘, ‘uid‘: ‘sa‘, ‘database‘:‘master‘, ‘server‘: ‘qikai‘, ‘Key‘: ‘other value‘, ‘retrycount‘: 3}

>>> d.clear()

>>> d

{}

 

 

listpython中使用最频繁的数据类型,python中的listperljava中的数组,perl中用来保存数组的变量总以@开始,在python中变量可任意取名并在内部会记录其数据类型,python中的list远比java中的数组强大,它可保存任意对象,并可在增加新元素时动态扩展

1)定义list[],此例创建5个元素的list,元素间用逗号分隔并保持着初始的顺序,单个元素用双引号引起来,整个元素集合用中括号括起来;list的下标总是从0开始的数组,任何一个非空list的第一个元素是li[0]

>>>li=["a","b","mpilgrim","z","example"]

>>> li

[‘a‘, ‘b‘, ‘mpilgrim‘, ‘z‘, ‘example‘]

>>> li[0]

‘a‘

>>> li[1]

‘b‘

>>> li[4]

‘example‘

2)负的list索引,负数索引从list的尾部开始来存取元素,任何一个非空的list最后一个元素总是li[-1],可这样理解li[-n]=li[len(li0-n],在此例中li[-3]=li[2]

>>> li[-1]

‘example‘

>>> li[-3]

‘mpilgrim‘

3list的分片slice,如li[1:3]指定2个索引得到list的子集叫一个sliceli[1:3]所返回的值是一个新的listli[1:3]这个子集包含了list中按顺序从第一个slice索引li[1]直到但不包括第二个slice索引li[3]这之间的所有元素,再如li[0:3]li[0]开始但不包括li[3]这之间的所有元素;slice简写,若左侧分片索引为0可将其省略,例如li[0:3]=li[:3],若右侧分片索引是list的长度,可将其省略,例如li[3:5]=li[3:];注意对称性li[:n]总返回前n个元素,li[n:]将返回剩下的元素,不管list有多长;若将左侧和右侧的两个分片全部省略,这将包括list的所有元素,但与原始的名为lilist不同,它是一个新的list,与原来的li有一样的元素,如li[:]是生成一个list完全拷贝的简写

>>> li[1:3]

[‘b‘, ‘mpilgrim‘]

>>> li[0:3]

[‘a‘, ‘b‘, ‘mpilgrim‘]

>>> li[:3]

[‘a‘, ‘b‘, ‘mpilgrim‘]

>>> li[3:5]

[‘z‘, ‘example‘]

>>> li[3:]

[‘z‘, ‘example‘]

>>> li[1:-1]

[‘b‘, ‘mpilgrim‘, ‘z‘]

>>> li[1:5]

[‘b‘, ‘mpilgrim‘, ‘z‘, ‘example‘]

>>> li[1:]

[‘b‘, ‘mpilgrim‘, ‘z‘, ‘example‘]

>>> li[:]

[‘a‘, ‘b‘, ‘mpilgrim‘, ‘z‘, ‘example‘]

4)向list中增加元素,appendinsertextend后面紧跟的是()小括号;appendlist的末尾追加单个元素;insert将单个元素插入到list中,数值参数是插入点的索引,list中的元素可重复(不必唯一),如此例li[2]li[6]extend用来连接list,注意不要使用多个参数来调用extend,而要用一个list参数进行调用,在本例中这个list有两个元素

>>> li.append("new")

>>> li

[‘a‘, ‘b‘, ‘mpilgrim‘, ‘z‘, ‘example‘,‘new‘]

>>> li.insert(2,"new")

>>> li

[‘a‘, ‘b‘, ‘new‘, ‘mpilgrim‘, ‘z‘,‘example‘, ‘new‘]

>>> li[2]

‘new‘

>>> li[6]

‘new‘

>>>li.extend(["two","elements"])

>>> li

[‘a‘, ‘b‘, ‘new‘, ‘mpilgrim‘, ‘z‘,‘example‘, ‘new‘, ‘two‘, ‘elements‘]

extendappend的差别:

extend接受一个参数,这个参数总是一个list,并且添加这个list中的每个元素到原list中,如下例中len(li)6个元素;

append接受一个参数,这个参数可以是任何数据类型,只是简单的追加到原list的尾部,如下例使用含有3个元素的list参数调用len(li)4个元素

>>> li=["a","b","e"]

>>> li

[‘a‘, ‘b‘, ‘e‘]

>>>li.extend(["d","e","f"])

>>> li

[‘a‘, ‘b‘, ‘e‘, ‘d‘, ‘e‘, ‘f‘]

>>> len(li)

6

>>>li=["a","b","e"]

>>> li

[‘a‘, ‘b‘, ‘e‘]

>>>li.append(["d","e","f"])

>>> li

[‘a‘, ‘b‘, ‘e‘, [‘d‘, ‘e‘, ‘f‘]]

>>> len(li)

4

>>> li[-1]

[‘d‘, ‘e‘, ‘f‘]

5)在list中搜索:indexlist中查找一个值的首次出现并返回索引值,index后紧跟()小括号若在list中没有找到值,python会引发一个异常,这一点与大部分语言截然不同,大部分语言会返回一个无效索引,好处在于在python程序中使用无效索引会引起崩溃;用in可测试一个值是否在list内,如"c" in li,若存在返回True,不存在返回False,注意python中的布尔值TrueFalse第一个字母是大写的,如同python中的其它东西一样是大小写敏感

>>> li.index("b")

1

>>> li.index("e")

2

>>> li.index("example")

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

ValueError: list.index(x): x not in list

>>> "c" in li

False

>>> "e" in li

True

6)从list中删除元素:removelist中删除一个值的首次出现,删除时若没找到值会引发异常来响应index方法,remove后紧跟()小括号;pop删除list的最后一个元素并将删除的值返回(注意做了两件事),li[-1]仅返回一个值但不改变list本身,li.remove("value")改变list但并不返回值

>>> li.remove("a")

>>> li

[‘b‘, ‘e‘, [‘d‘, ‘e‘, ‘f‘]]

>>> li.pop()

[‘d‘, ‘e‘, ‘f‘]

>>> li

[‘b‘, ‘e‘]

7)使用list的运算符:可用+运算符连接起来,list=list+other list相当于list.extend(otherlist)+运算符把一个新的list作为值返回(连接后的新的list),而extend只修改存在的list,对于大型list来说,extend的执行速度要快些;+=,如li+=["two"]等同于li.extend(["two"])+=运算符可用于list、字符串和整数,并且它可以被重载于用户自定义的类中;*可作为一个重复器作用于listli=[1,2]*3等同于li=[1,2]+[1,2]+[1,2]

>>>li=["a","b","mpilgrim"]

>>> li

[‘a‘, ‘b‘, ‘mpilgrim‘]

>>>li=li+["example","new"]

>>> li

[‘a‘, ‘b‘, ‘mpilgrim‘, ‘example‘, ‘new‘]

>>> li+=["two"]

>>> li

[‘a‘, ‘b‘, ‘mpilgrim‘, ‘example‘, ‘new‘,‘two‘]

>>> li=[1,2]*3

>>> li

[1, 2, 1, 2, 1, 2]

8)映射listpython的强大特性之一是其对list的解析,它提供一种紧凑的方法,可通过对list中的每个元素应用一个函数,从而将一个list映射为另一个list

>>> li=[1,9,8,4]

>>> [elem*2 for elem in li]  (从右向左看便于理解,python循环遍历li中的每个元素,对每个元素均执行elem*2这一函数操作,临时将其值赋给elem,再应用函数elem*2计算,最后将计算结果返回到要返回的list中,对list的解析并不改变原始的list

[2, 18, 16, 8]

>>> li=[elem*2 for elem in li]

>>> li

[2, 18, 16, 8]

 

 

tuple是不可变list,一旦创建了tuple就不能以任何方式改变它

1)定义tuple与定义list相同,不同之处list的整个元素用[]中括号而tuple的整个元素用()小括号;tuple没有方法,不可以使用appendinsertremoveextendpop这些方法,但可用indexin用来查找某元素是否存在

tuple的好处,tuplelist操作速度快,如果定义了一个值的常量级,并且唯一要用它做的是不断的遍历它,请使用tuple代替list

tuple可对不需要修改的数据进行写保护,使得代码更安全,使用tuple如同拥有一个隐含的assert语句,说明这一数据是常量,如果必须要改变这些值,则用到一个特殊的函数执行tuplelist的转换;

tuple可在dictionary中被用作key,但list不行,dictionarykey可以是字符串、整数和其它几种类型,如tupledictionarykey的必须是不可变的,tuple本身是不可变的,但如果有一个listtuple就认为可变若用于dictionarykey就是不安全的,只有字符串、整数和其它对dictionary安全的tuple才可以用作dictionarykey

tuple可用在字符串格式化中

注:tuplelist可相互转换,内置的tuple函数接收一个list返回一个有相同元素的tuple,内置的list函数接收一个tuple返回一个list,可理解为tuple冻结一个listlist解冻一个tuple

>>>t=("a","b","mpilgrim","z","example")

>>> t

(‘a‘, ‘b‘, ‘mpilgrim‘, ‘z‘, ‘example‘)

>>> t[0]

‘a‘

>>> t[-1]

‘example‘

>>> t[1:3]

(‘b‘, ‘mpilgrim‘)

>>> t.append("new")

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has noattribute ‘append‘

>>> "z" in t

True

>>> t.index("example")

4

>>>t.extend(["new","old"])

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has noattribute ‘extend‘

>>> t.remove("example")

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has noattribute ‘remove‘

>>> t.insert(2,"new")

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

AttributeError: ‘tuple‘ object has noattribute ‘insert‘

 


三、

raw_inputif…else…forwhile True:

注:raw_input() 默认输入是字符串,若要限定仅输入数字需调整int(raw_input())print’’’CONTENT’’’三引号中的%s,%d,%s是在注释的信息中引用变量,print后的单引号内的%s%d也是引用外部的变量,print后不管是三引号还是单引号都要跟固定的格式,如print ‘the number is:%d’ % iprint ‘the number is :%d’ % (i)

注:python中引用一范围内的数值为range(1,100),在shell中是seq 1 100echo {1..100}

 

脚本使用(用raw_input实现用户交互)

>>> raw_input(‘please input yourname: ‘) 

please input your name: jowin

‘jowin‘

>>> name=raw_input(‘please inputyour name: ‘)  (给name变量赋值)

please input your name: jowin

>>> name

‘jowin‘

 

[root@localhost ~]# vim test1.py

-------------script start------------

#!/usr/bin/enc python

#

name=raw_input(‘Name:‘)

age=raw_input(‘Age:‘)

job=raw_input(‘Job:‘)

print ‘--------------‘

print name,age,job

--------------script end-------------

[root@localhost ~]# python test1.py

Name:jowin

Age:12

Job:yumwei

--------------

jowin 12 yumwei

 

[root@localhost ~]# vim test1.py

-------------script start----------

#!/usr/bin/enc python

#

name=raw_input(‘Name:‘)

age=raw_input(‘Age:‘)

job=raw_input(‘Job:‘)

print ‘--------------‘

print name,‘\n‘,age,‘\n‘,job

--------------script end------------

[root@localhost ~]# python test1.py

Name:jowin

Age:18

Job:IT

--------------

jowin

18

IT

 

[root@localhost ~]# vim test1.py

-------------script start-----------

#!/usr/bin/enc python

#

name=raw_input(‘Name:‘)

age=raw_input(‘Age:‘)

job=raw_input(‘Job:‘)

print ‘--------------‘

print‘\tNAME:‘,name,‘\n\tAGE:‘,age,‘\n\tJOB:‘,job

--------------script end-------------

[root@localhost ~]# python test1.py

Name:jowin

Age:22

Job:internet

--------------

       NAME:jowin

       AGE:22

       JOB:internet

 

[root@localhost ~]# vim test1.py

------------script start-------------

#!/usr/bin/enc python

#

name=raw_input(‘Name:‘)

age=int(raw_input(‘Age:‘))

job=raw_input(‘Job:‘)

print ‘--------------‘

print type(age)

print ‘‘‘\tNAME:%s

\tAGE:%d

\tJOB:%s‘‘‘ %(name,age,job)

---------------script end-------------

注:raw_input() 默认输入是字符串,若要限定仅输入数字需调整int(raw_input());此脚本中’’’CONTENT’’’三引号中的%s,%d,%s是在注释的信息中引用变量

[root@localhost ~]# python test1.py

Name:jowin

Age:23

Job:hehe

--------------

<type ‘int‘>

       NAME:jowin

       AGE:23

       JOB:hehe

[root@localhost ~]# python test1.py(当Age:处输入不是数字时会报错)

Name:jowin

Age:hehe

Traceback (most recent call last):

 File "test1.py", line 4, in <module>

   age=int(raw_input(‘Age:‘))

ValueError: invalid literal for int() withbase 10: ‘hehe‘

 

 

脚本使用(流程控制if…else…

[root@localhost ~]# vim test2.py

-------------script start--------------

#!/usr/bin/env python

#

name=raw_input(‘please input your name: ‘)

age=int(raw_input(‘please input your age:‘))

job=raw_input(‘please input your job: ‘)

print ‘--------------‘

print ‘‘‘NAME:%s

AGE:%d

JOB:%s‘‘‘ %(name,age,job)

 

if name==‘chai‘:

       print "congratulations,you will can have the holiday."

elif age<30:

       print "sorry,you will not have the holiday."

else:

       print "you can do it as you had sent a gift to your booss."

----------------script end----------------

[root@localhost ~]# python test2.py

please input your name: jowin

please input your age: 22

please input your job: internet 

--------------

NAME:jowin

AGE:22

JOB:internet

sorry,you will not have the holiday.

 

脚本使用(for语句)

>>> for i in range(1,5):

...    print ‘the number is:%d‘ % i

...

the number is:1

the number is:2

the number is:3

the number is:4

>>> for i in range(1,3):

...    print ‘the number is:%d‘ % (i)

...

the number is:1

the number is:2

>>> for i in range(1,5):

...    if i==3:

...             print "good luck,itis:",i

...    print "the number is:%d" % i

...

the number is:1

the number is:2

good luck,it is: 3

the number is:3

the number is:4

 

[root@localhost ~]# vim test3.py

----------------------scriptstart--------------------

#!/usr/bin/env python

#

while True:

       input=raw_input(‘please input your name: ‘)

       if input==‘jowin‘:

                password=raw_input(‘please input your password: ‘)

                p=‘123‘

                while password!=p:

                       password=raw_input(‘wrong password,input again: ‘)

                else:

                        print "welcomelogin to my territory."

                       break

       else:

                print "sorry,user %s notfound " % input

------------------scriptend---------------------------

[root@localhost ~]# python test3.py

please input your name: jowin

please input your password: 123

welcome login to my territory.

[root@localhost ~]# python test3.py

please input your name: chai

sorry,user chai not found

please input your name: haha   

sorry,user haha not found

 

 


本文出自 “Linux运维重难点学习笔记” 博客,请务必保留此出处http://jowin.blog.51cto.com/10090021/1771282

VII python(1)基础知识

标签:python

原文地址:http://jowin.blog.51cto.com/10090021/1771282

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!