Python【01】【基础部分】- A

一、WHAT'S PYTHON ?

1、python 简介

Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议 。
Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

2、谁在用 python

Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维自动化测试大数据分析、爬虫、Web 等。

3、python 的种类

  • Cpython

Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。

  • Jyhton

Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。

  • IronPython

Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)

  • PyPy(特殊

Python实现的Python,将Python的字节码字节码再编译成机器码。

  • RubyPython、Brython ...

 4、python 优缺点

  优点:

  * Simple Elegant Clear (简单、优雅、明确)
  * 强大的第三方库
  * 易移植
  * 面向对象
  * 可扩展
  缺点:

  * 速度慢(相对环境)
  * 代码不能加密

二、PYTHON BASE

1、安装 python 环境

For Linux:

  如果是ubuntu14.04+的版本,那么默认的python就是2.7+啦

1 tom@python:~$ cat /etc/issue
2 Ubuntu 14.04.3 LTS \n \l
3 
4 tom@python:~$ python -V
5 Python 2.7.6

   如果是centos6系列,那么请升级你的默认python到2.7+

 1 1、安装gcc,用于编译Python源码
 2     yum install gcc
 3 2、下载源码包,https://www.python.org/ftp/python/
 4 3、解压并进入源码文件
 5 4、编译安装
 6     ./configure
 7     make all
 8     make install
 9 5、查看版本
10     /usr/local/bin/python2.7 -V
11 6、修改默认Python版本
12     mv /usr/bin/python /usr/bin/python2.6
13     ln -s /usr/local/bin/python2.7 /usr/bin/python
14 7、防止yum执行异常,修改yum使用的Python版本
15     vi /usr/bin/yum
16     将头部 #!/usr/bin/python 修改为 #!/usr/bin/python2.6

For Windows:

1 1、下载安装包
2     https://www.python.org/downloads/
3 2、安装
4     默认安装路径:C:\python27
5 3、配置环境变量
6     【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
7     如:原来的值;C:\python27,切记前面有分号

2、python 代码的执行过程

   Call :滕兰老师说要把第一次交给“hello world”

#!/usr/bin/env python
# coding:utf-8

print 'hi,yue bu ?'

 

python 文件中的代码会由解释器进行语法/词法的分析,没有问题后进行编译调入内存执行。

python在执行.py的文件时会生成一个同名.pyc的文件,这个文件是源文件编译后的字节码文件,源文件编译成自解码后再转为机器可读的二进制码交给CPU处理。

3、什么是解释器?

 解释器(Interpreter),又译为直译器,能够把高级编程语言转译运行。说白了就是一翻译(也许是最近抗战片看多了,总会联想到穿着一半日本军装的汉奸翻译* *)

4、内容编码

python解释器在读取.py文件中的代码时,会对内容进行编码(默认是ASCII)

ASCII

ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。

1 >>> a = 'doudou'
2 >>> type(a)
3 <type 'str'>

UNICODE

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536。Unicode的出现是因为ASCII的表示空间有限。

1 >>> name = u'小花'
2 >>> type(name)
3 <type 'unicode'>
4 >>> name
5 u'\u5c0f\u82b1'
6 >>> len(name)
7 2 

UTF-8

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。针对unicode的可变长度的字符编码,在内存中字符是Unicode进行处理的,硬盘存储的时再转为utf-8。

 1 >>> name
 2 u'\u5c0f\u82b1'
 3 >>> name =name.encode('utf-8')    # 使用encode将unicode转为utf-8
 4 >>> name
 5 '\xe5\xb0\x8f\xe8\x8a\xb1'
 6 >>> len(name)
 7 6
 8 >>> name = name.decode('utf-8')    # 使用decode将utf-8转为unicode
 9 >>> name
10 u'\u5c0f\u82b1'
11 >>> len(name)
12 2 

 ps:在写脚本的时候默认是ASCII的编码方式,解释器读入内存的时候会转换为Unicode进行处理,如果出现中文就会提示不能识别,所以我们在写脚本的时候如果有中文,就要指定源文件以什么样的编码方式存储。

1 #!/usr/bin/env python
2 # coding:utf-8
3 
4 count = 0 

5、编程风格

python 的代码编写会遵循Simple、Elegant、Clear的风格。

缩进统一

1 开头行不能有空格
2 不同级别代码缩进不同
3 同一级别代码缩进必须相同  

6、注释

对编写的代码文件要一定的注释,保证简单、易读,方便他人方便自己。

单行注释:# *****

1 # copy and rename

多行注释/格式化输出:’’’ ****** ‘’’ 

1 '''
2 copy
3 and
4 rename ''' 

 三、流程控制

 1、python模块的调用与传参的捕获

Python有大量的模块,从而使得开发Python程序非常简洁。类库有包括三中:

  • Python内部提供的模块
  • 业内开源的模块
  • 程序员自己开发的模块

Python内部提供一个 sys 的模块,其中的 sys.argv 用来捕获执行执行python脚本时传入的参数

1 #!/usr/bin/env python
2 # coding:utf-8
3 
4 import sys
5 print sys.argv 

2、用户交互(输入内容)

raw_input、input

需求:要求用户输入用户名密码,正确后输出欢迎信息。

 1 #!/usr/bin/env python
 2 # coding:utf-8
 3 
 4 user_name = 'tom'
 5 user_password = '123'
 6 input_name = raw_input('User Name:')    # raw_input() 默认把输入的内容当作字符串来处理
 7 input_password = input('Password:')     # input() 会将输入的内容保留原格式输出
 8 if input_name == user_name and input_password == user_password:
 9     print "Welcome to Linux!"
10 else:
11     print "Login invalid" 

getpass  用户输入内容不可见

 1 #!/usr/bin/env python
 2 # coding:utf-8
 3 
 4 import getpass      # 调用getpass模块
 5 user_name = 'tom'
 6 user_password = '123'
 7 input_name = raw_input('User Name:')
 8 input_password = getpass.getpass('Password:')    # 引用功能,使用输入内容不可见
 9 if input_name == user_name and input_password == user_password:
10     print "Welcome to Linux!"
11 else:
12     print "Login invalid"

3、if ...elif ...break/continue...else、while

需求:要求用户输入用户名密码,正确后输出欢迎信息,输错三次后退出。

 1 #!/usr/bin/env python
 2 # coding:utf-8
 3 
 4 import getpass
 5 count = 0
 6 user_name = 'tom'
 7 user_name1 = 'doudou'
 8 user_password = '123'
 9 while count < 3:    #  while 条件
10     input_name = raw_input('User Name:')
11     input_password = getpass.getpass('Password:')
12     if input_name == user_name1:
13         print "This user is not available."
14         continue      # continue 中断本次循环
15     elif input_name == user_name and input_password == user_password:
16         print "Welcome to Linux!"
17         break        # break 退出循环
18     else:
19         print "Login invalid"
20     count += 1     # 一定要注意代码块的区分与缩进   条件+1

四、数据类型

1、数据类型分类

        >>>单值:
                数字:(digital)
                    整型:(integer)
                    长整型:(long)
                    符点型:(float)
                    复数:(complex)
                    字符串:(string)
                布尔值:(boolean)
        >>>集合:
                列表:(list)
                元组:(tuple)
                字典:(dict)
                哈希表:(hash)

2、变量:(variable)

变量,不只是一个可变化的量,它是一段内存空间的命名,指向内存地址的符号链接

1 变量标识符命名规范:
2 1、标识符的第一个字符必须是字母(大小写字母)或”_”(下划线)
3 2、标识符的其它部分可以由字母、”_”、数字(0-9)组成
4 3、标识符严格区分大小写
5 4、以下关键字不能被定义为变量['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] 

定义变量与输出变量:

1 >>> a = 'source'
2 >>> a
3 'source'

变量有意思的指向

 1 >>> a = 'job'
 2 >>> b = 'name'
 3 >>> a = b
 4 >>> a
 5 'name'
 6 >>> b
 7 'name'
 8 >>> b = 'age'    # 当变量b重新定义的时候,而a并没有跟着b变化而变化,原因是:当a=b时,a的值是b所指向内存空间中的‘name’,所以当b重新定义新值的时候,a依然指向‘name’
 9 >>> a
10 'name'
11 >>> b
12 'age'

 

3、字符串(string)  

  占位符:

 1 >>> name = 'how old are you %s' % '24'            # %s (str) %d (digital)
 2 >>> name
 3 'how old are you 24'
 4 >>> mame = 'i am %s ,%d years old.' % ('xiaohua',24)    # 多个占位符,需要在后面按顺序指定多个参数,只在内在中开辟一块空间。
 5 >>> name
 6 'how old are you 24'
 7 # 也可以这样表示
 8 >>> name = 'i am %s,%d years old.'
 9 >>> name % ('xiaohua',24)
10 'i am xiaohua,24 years old.'
11 # 也可以这样表示,三种方式执行过程一样
12 >>> name = 'i am {0},age {1}'
13 >>> name.format('xiaohua',24)
14 'i am xiaohua,age 24' 

  索引/切片:

 1 >>> name
 2 'soure'
 3 >>> name[0]
 4 's'
 5 >>> name[:0]
 6 ''
 7 >>> name[0:]
 8 'soure'
 9 >>> name[-1]
10 'e' 

  长度:len()

1 >>> len(name)
2 5
3 >>> print name[-1]
4 e
5 >>> print name[len(name)-1]        # 最后一个值可以用len()做运算得到
6 e 

  去除空格:strip()

1 >>> name
2 '  home  '
3 >>> print name.strip()        # strip() 去除字符串两端的空格
4 home
5 >>> print name.lstrip()        # lstrip() 去除字符串左端的空格
6 home  
7 >>> print name.rstrip()        # rstrip() 去除字符串右端的空格
8   home 

  分割:split()

1 >>> names = 'xiaohua,xiaoli'
2 >>> names
3 'xiaohua,xiaoli'
4 >>> names.split(',')
5 ['xiaohua', 'xiaoli']        # 字符串分割后得到一个列表
6 >>> names.split('h')
7 ['xiao', 'ua,xiaoli' 

4、列表:(list)

列表是数据的集合,列表内的元素可以被查询、修改

1 >>>  b = ['job', 'salary', 'name',12,'shop','xyz','copy']        # 列表中的元素可以修改,支持增删改查
# 或 b = (['job', 'salary', 'name',12,'shop','xyz','copy']) 列表的创建会调用([])来完成
2 >>> b 3 ['job', 'salary', 'name',12,'shop','xyz','copy']

  长度: len() 可以查看列表中元素的个数

1   >>> len(b)
2   3 

  索引:NAME[N] 可以查看元素在列表中的位置

1  >>> b[0]
2 'job'
3 >>> b[1]
4 'salary'
5 >>> b[-1]      # -1就是倒数喽
6 'copy'

  切片(slice) 切片指从列表中取出多个元素

 1  >>> b[0:3]         # 取从0到第3个元素,不包括第4个
 2 ['job', 'salary', 'name']
 3  >>> b[:3]          # 与上面一至
 4  ['job', 'salary', 'name']
 5 >>> b[2:5]          # 取从第3到第5个元素
 6 ['name', 12, 'shop']
 7  >>> b[0:-3]         # 取从第1至倒数第3个元素(之间)
 8 ['job', 'salary', 'name', 12]
 9 >>> b[-3:]           # 取倒数第3个至最后一个元素
10 ['shop', 'xyz', 'copy']
11 >>> b[1:8:2]         # 取第1到最后,每隔一个取一个元素,最后:2是步长,以第隔几个元素取一个
12 ['salary', 12, 'xyz']
13 >>> b[::2]           # 从头到尾每隔一个取一个
14 ['job', 'name', 'shop', 'copy'] 

  增加:NAME.append()    在列表后添加一个元素

1 ['job', 'salary', 'name', 12, 'shop', 'xyz', 'copy']
2 >>> b.append('sese')
3 >>> b
4 ['job', 'salary', 'name', 12, 'shop', 'xyz', 'copy', 'sese'] 

  删除1:NAME.pop()       删除列表中最后一个元素

1 >>> b.pop()
2 'sese'
3 >>> b
4 ['job', 'salary', 'name', 12, 'shop', 'xyz', 'copy'] 

  删除2:NAME.remove()     删除列表中一个元素,如果有相同元素,从左向右删除

1 >>> b.remove('xyz')
2 >>> b
3 ['job', 'salary', 'name', 12, 'shop', 'copy']

  删除3:del NAME[索引]

1 >>> del b[3:7]    # 删除3到7的元素(不包括7)
2 >>> b
3 ['shop', 'salary', 'name', 'copy', 'NAME', 12]

  修改:NAME.insert(索引,新值 )      修改目标位置的元素

1 >>> b
2 ['job', 'salary', 'name', 12, 'shop', 'copy']
3 >>> b.insert(3,'NAME')
4 >>> b
5 ['job', 'salary', 'name', 'NAME', 12, 'shop', 'copy']

  查询:NAME.index()      查询元素在列表中的索引位置

1 >>> b.index('shop')
2 5

  联结:‘’join

1 >>> name_list
2 ['xiaohua', 'xiaoming', 'old', 'yound', 'boy', 'doudou']
3 >>> '_'.join(name_list)            # join 用来指定列表内元素的联结方式,只对字符串生效
4 'xiaohua_xiaoming_old_yound_boy_doudou' 

  包含:''in

1 >>> 'doudou' in name_list
2 True            # in 返回一个bool值,多用来做判断  

  统计:NAME.count()        统计元素在列表中的个数

1 >>> b.append('copy')
2 >>> b.count('copy')
3 2 

  合并:NAME.extend(NAME2)  将列表2合并到列表1中

1 >>> b1 = ['haha','heihei']
2 >>> b .extend(b1)
3 >>> b
4 ['job', 'salary', 'name', 'NAME', 12, 'shop', 'copy', 'copy', 'haha', 'heihei']

  排序:NAME.sort()

1 >>> b
2 ['job', 'salary', 'name', 'NAME', 12, 'shop', 'copy', 'copy', 'haha', 'heihei']
3 >>> b.sort()
4 >>> b
5 [12, 'NAME', 'copy', 'copy', 'haha', 'heihei', 'job', 'name', 'salary', 'shop']  

  反转:NAME.reverse()

1 >>> b
2 [12, 'NAME', 'copy', 'copy', 'haha', 'heihei', 'job', 'name', 'salary', 'shop']
3 >>> b.reverse()
4 >>> b
5 ['shop', 'salary', 'name', 'job', 'heihei', 'haha', 'copy', 'copy', 'NAME', 12]  

  循环: for

 1 #!/usr/bin/env python
 2 # coding:utf-8
 3 
 4 name_list = ['xiaohua','xiaoli','xiaoping']
 5 for item in name_list:
 6         if item == 'xiaohua':
 7             print 'yuanlaizoushiniya!'
 8             continue    #  当次循环不再继续
 9         elif item == 'xiaoli'
10             print 'shaobing'
11             break        # 退出循环
12         else:
13             pass        #  写也可以,不写也可以 

5、元组(tuple)

1 >>> name_tuple = (12,14,15,16,18)    # 元组里的元素一旦初始化后,但不能修改
2 >>> name_tuple
3 (12, 14, 15, 16, 18)
4 >>> name_tuple = tuple((12,14,15,16,18))
5 >>> name_tuple
6 (12, 14, 15, 16, 18) 

  索引/切片

1 >>> name_tuple[0]
2 'xiaohua'
3 >>> name_tuple[0:]
4 ('xiaohua', ['old', 'age', 14]) 

  长度: len()

1 >>> name_tuple = ('xiaohua',['old','age',14])
2 >>> name_tuple
3 ('xiaohua', ['old', 'age', 14])
4 >>> len(name_tuple) 

  包含:in

1 >>> 'age' in name_tuple
2 False 

  循环:for       与列表中的循环一样

6、字典(dict)

1 # 字典使用key/value的格式来存储数据,每一个key/value是一个键值对,键值对是唯一的,字典支持增删改查
2 >>> name_dict = {'name':'xiaoping','age':18,'job':'it'}
3 >>> name_dict
4 {'job': 'it', 'age': 18, 'name': 'xiaoping'}

  items()/keys()/values()

 1 #!/usr/bin/env python
 2 # coding:utf-8
 3 
 4 name_dict = {'name':'xiaoping','age':18,'job':'it'}
 5 
 6 for k,v in name_dict.items():        # .items() 表示字典里所有的元素
 7     print k,v
 8 name_dict = {'name':'xiaoping','age':18,'job':'it'}
 9 print  name_dict.keys()              # .keys()  表示字典里所有的key
10 name_dict = {'name':'xiaoping','age':18,'job':'it'}
11 print  name_dict.values()            # .values()  表示字典里所有的value 

  字典是无序输出的

1 tom@python:/data/python/day1$ python dict.py
2 job it
3 age 18
4 name xiaoping   

五、运算

 

六、文件的基本操作

过程:
找到文件--打开文件--文件操作(读/写)--关闭文件            
使用方式:

1 open/file(PATH,MODE)       

模式:

1 r,  只读,以只读的方式打开文件,读取内容。
2 w,  只写,如果文件已经存在,会将文件覆盖,如果不存在,将会创建新文件。
3 a,  追加,如果文件已经存在,内容会追加到末尾,如果不存在,将会创建新文件。
4 w+, 读写,如果文件已经存在,会将文件覆盖,如果不存在,将会创建新文件。 

读取   

1 read()        # 一次性全部读入内存
2 readlines()    # 逐行读入内存
3 for line in FILE:    # 每次循环,只读一行 

  read() 全部读入到内存

1 file_obj = file('/data/python/day1/tt.txt','read')
2 print file_obj.read()
3 file_obj.close()
4 # 输出
5 tom@python:/data/python/day1$ python file.py
6 job,12,home
7 copy,sel,45

  readlines()逐行读取入到内存。

1 file_obj = file('/data/python/day1/tt.txt','read')
2 print file_obj.read()
3 file_obj.close()
4 #输出后是一个列表,每个元素后面都带一个换行符
5 tom@python:/data/python/day1$ python file.py
6 ['job,12,home\n', 'copy,sel,45\n']

 写入

1 write_list.write()  # 可以一次性写入
2 write_list.writelines()  # 也可以逐行写入 

  write()例子

1 write_obj = file('./name.txt','w') 
2 write_obj.write(str_list)
3 write_obj.close()

 

 


计算器链接:http://www.cnblogs.com/wupeiqi/articles/4949995.html
 



 参考链接:http://www.cnblogs.com/wupeiqi/articles/4906230.html

 

posted @ 2015-10-27 10:49  YaYaTang  阅读(406)  评论(0编辑  收藏  举报