#######python########
python的基本
[root@desktop ~]# yum install python -y
[root@desktop ~]# python -V ##查看python版本
Python 2.7.5
[root@desktop ~]# python --version
Python 2.7.5
为什么用/usr/bin/python
关于python脚本中的第一行内容 :
#!/usr/bin/python 这种写法表示直接引用系统的默认的 Python 版本,这样的话python 程序移植到其他机器上可能运行的时候有问题,因为别人系统默认的 Python版本与你预期的并不一致。
#!/usr/bin/env python 这种写法表示,引用环境变量里面自定义的Python 版本,具有较强的可移植性,推荐这种写法。
##交互使用python
当在shell命令行输入python命令会进入一个交互式的python编程环境
[root@desktop ~]# python
Python 2.7.5 (default, Feb 11 2014, 07:46:25)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a=1
>>> print a ##python沿袭了C语言的很多用法,输出一字符串,使用print;
1
>>>##退出python的交互式环境通过快捷键ctrl+d或者使用exit()函数;
[root@desktop ~]# vim 1.py
#!/bin/env python
# coding:utf-8 ##指定编码格式(四个任意一个都可以)
# coding=utf-8
# encoding:uft-8
# encoding=utf-8
#定义变量a,值为1
a=1
print a
[root@desktop ~]# chmod +x 1.py ##加上执行权限
[root@desktop ~]# python 1.py
1
理解字符编码
ASCII:美国人发明了计算机,用二进制存储数据,英文字母加各个字符一共128个,每8位存储一个字符,2^8=256,可通过 ord() 函数去查看字符对应的ASCII码。
Unicode:但是ASCII码忽略了中文,韩文,日文等其他国家的文字,这个时候256个字符的对应关系明显是不够用的,这时候就用两个字节对应一个文字,2**16=65536.
UTF-8:英文字符明明可以通过一个字节存储,Unicode却需要2个字节来存储,对于存储比较小的计算机来说,是浪费很多不必要占用的空间,这个时候就出现utf-8。那么什么是utf-8呢?简单来说就是可变长度编码格式,英文字符用ASCII码来存,而中文呢,就用utf-8来存,这个时候中文就不是两个字节存储,而是三个字节来存。
ASCII:1字节=8位 2^8=256;
Unicode:2字节=16位,2^16=65536 a --> 2字节 中文 --> 2字节;
uft-8: a --> 1字节 中文 --> 3字节
GB2312: 2字节
[root@desktop ~]# python
Python 2.7.5 (default, Feb 11 2014, 07:46:25)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a='westos'
>>> type(a)
<type 'str'> ##类型:字符串
>>> b=u'westos' ##加上u类型会发生改变
>>> type(b) ##类型:unicode
<type 'unicode'>
内存读取: Unicode(encode) ##不能一个字节三个字节跳换,不符合读取规则
存在硬盘: utf-8(decode)
当存储数据到硬盘,需要考虑到节省空间的问题,所以采用utf-8格式进行存储;
当将数据读入内存时,统一一个编码格式便于操作,采用unicode编码格式;
在给客户看的时候,会有注释,会出现英中文交汇,为了方便操作,采用unicode编码格式,在存储数据到硬盘时候,为了节约空间,采用utf-8进行存储。
字符的编码:将Unicode转化成utf-8(字符串)
字符的解码:针对uft-8而言,将utf-8转换成Unicode
>>> name_unicode = u"高手"
>>> type (name_unicode)
<type 'unicode'>
>>> name_utf8 = name_unicode.encode('utf-8') ##字符的编码(encode是把之前的unicode编码为utf-8)
>>> type(name_utf8)
<type 'str'>
>>> name_unicode1 = name_utf8.decode('utf-8') ##字符的解码(decode是把之前的utf-8解码为unicode)
>>> type(name_unicode1)
<type 'unicode'>
>>>
# 定义一变量,编码格式为unicode
>>> name_unicode = u'粉条'
>>> type(name_unicode)
<type 'unicode'>
# 字符的编码,从unicode到utf-8格式
>>> name_utf8 = name_unicode.encode('utf-8')
>>> type(name_utf8)
<type 'str'>
# 字符的解码操作,从utf-8解码到unicode编码格式
>>> name_to_unicode = name_utf8.decode('utf-8')
>>> type(name_to_unicode)
<type 'unicode'>
ipython:对python在一定程度上进行了优化
python的解释器:
cpython
安装ipython。
pycharm安装python编辑器
python与c的区别
脚本编写C:
[root@desktop mnt]# vim 1.c
[root@desktop mnt]# chmod +x 1.c
[root@desktop mnt]# gcc 1.c -o 1.1.c
[root@desktop mnt]# ./1.1.c
hello!
[root@desktop mnt]# cat 1.c
#include <stdio.h>
void hello(){
printf("hello!");
}
void main(){
hello();
}
编写python:
[root@desktop mnt]# vim 2.py
[root@desktop mnt]# chmod +x 2.py
[root@desktop mnt]# ./2.py
hello
wm
[root@desktop mnt]# cat 2.py
#!/usr/bin/env python
def hello():
print "hello"
def main():
hello()
print "wm"
main()
根据上面的两个不同编程语言实现同一功能的分析,总结python编程初级要掌握的编程风格如下:
1)不要在行尾加分号;
2)每行不超过80个字符;
3)Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。
4)增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。
练习:
编写简单的python输入x=10
若x大于0,输出x是正数,同时输出x-10
若x小于0,输出x是负数,同时输出x+10
否则,输出x是0
#!/usr/bin/env python
#coding:utf-8
__author__ = "aely"##作者
'''##以下内容可以在设置里面设置模板
@author:haoning##编写者
@file:333.py##文件名
@contact:1371975@qq.com##联系人
@time:6/25/171:42 PM##编写时间
'''
x=10
if x>0:
print "x是正数"
b= x-10
print b
elif x<0:
print "x是负数"
c= x+10
print c
else:
print "x是0"
python注释
单行注释: # 常被用作单行注释符号, # 开头的行,其右边的任何数据都会被忽略,当做是注释。
块注释: 需要批量文本或代码时,使用三引号 ''' ''' .,当然三引号也可以实现多行文本格式化打印。
在python里面打开python Console
In[2]: print 1
1
In[3]: print "ha"
ha
In[4]: print "wq521"
wq521
In[5]: print 1>2
False
In[6]: print 19+13
32
In[7]: raw_input()
>? hello
Out[7]: 'hello'
In[8]: print raw_input
<built-in function raw_input>
In[9]: name = raw_input("NAME:")
NAME:>? haha
In[10]: print name
haha
In[11]: name = raw_input("Age")
Age>? 3
In[13]: print name
3
In[14]: age = raw_input("Age")
Age>? 3
In[15]: name = raw_input("NAME:")
NAME:>? haha
In[16]: type(age)
Out[16]: str
In[17]: age = input('Age')
Age>? 4
In[18]: type(age)
Out[18]: int
In[19]: print age>10
False
In[20]: print age=10
File "<ipython-input-20-87481056a110>", line 1
print age=10
^
SyntaxError: invalid syntax
In[21]: print age<10
True
练习(要求):
小练习: 编写一程序,录入信息包括 hostname、IP、used_year、CPU、Memory、manager_name ,如果使用年限超过10年,直接显示警告信息“该服务器使用年限太久!”,如果使用年限不超过10年,显示该服务器信息如下面的格式如下:
主机信息
主机名: hostname
IP:IP
使用年限:used_year
CPU:CPU
Memory:Memory
编程如下:
#!/usr/bin/env python
#coding:utf-8
__author__ = "aely"
'''
@author:haoning
@file:text.py
@contact:1371975@qq.com
@time:6/25/173:10 PM
'''
hostname = raw_input("主机名:")
IP = raw_input('IP:')
user_year = input('user_year:')
CPU = raw_input('CPU:')
Memory = raw_input('Memory:')
manager_name = raw_input('manager_name:')
if user_year>10:
print("该服务器使用年限太久!")
exit()
else:
haha = '''
主机信息
主机名:%s
IP:%s
使用年限:%d
CPU:%s
Memory:%s
manager_name:%s
''' %(hostname,IP,user_year,CPU,Memory,manager_name)
print haha
测试:
/usr/bin/python2.7 /home/kiosk/PycharmProjects/1/text.py
主机名:hostname##交互式输入
IP:172.25.254.39
user_year:6
CPU:i5
Memory:8G
manager_name:hao
主机信息##自动显示
主机名:hostname
IP:172.25.254.39
使用年限:6
CPU:i5
Memory:8G
manager_name:hao
Process finished with exit code 0
python的垃圾回收机制
1)Python在内存中存储了每个对象的引用计数(reference count)。如果计数值变成0,那么相应的对象就会消失,分配给该对象的内存就会释放出来用作他用。
2)PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少.引用计数为0时,该对象生命就结束了
变量命名方式:下划线/数字/字母/(不能以数字开头)
>>> a=1
>>> print a
1
>>> a_1 = 111
>>> _a = 222
>>> print _a
222
>>> 1a = 111
File "<stdin>", line 1
1a = 111
^
SyntaxError: invalid syntax //指语法错误,无效的语法
>>> a = 5
>>> b = 3>>> print a + b
8
>>> print a + b +c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined //名称错误
运算符与表达式
赋值运算符:=, +=, -=, /=, *=, %=
>>> a=1
>>> print a
1
算术运算符:+, -, , /, //, %, *
>>> 1 + 1
2
>>> 1 - 1
0
>>> 1 * 3
3
>>> 1 / 2##整型的都为整型
0
>>> 1.0 / 2##存在浮点型的,运算结果会出现浮点
0.5
>>> 1.0 // 2
0.0
>>> 1 % 2
1
>>> 2 ** 3
8
>>> a33 = 3 ** 3
>>> print a33
27
>>> print "a33=",a33
a33= 27
关系运算符: >, >=, <, <=, !=, ==
布尔值:1 < 2,返回一个布尔类型的结果
>>> 1 < 2
True
>>> 1 > 2
False
逻辑运算符:逻辑与and, 逻辑或or, 逻辑非not
1本身代表True
2本身代表False
练习:
编写一个四则表达式:
#!/usr/bin/env python
#coding:utf-8
from __future__ import division##引入一个模块,使得整数除法也能输出准确的数字
__author__ = "aely"
'''
@author:haoning
@file:yunsuan.py
@contact:1371975@qq.com
@time:6/25/173:50 PM
'''
number1 = input("num1=")
operate = raw_input("operate=")
number2 = input("num2=")
if operate == "+":
print number1 + number2
elif operate == "-":
print number1 - number2
elif operate == "*":
print number1 * number2
elif operate == "/":
print number1 / number2
else :
print "请重新其他输入简单的运算符+,-,*,/"
测试:
a.运算符的测试
/usr/bin/python2.7 /home/kiosk/PycharmProjects/1/yunsuan.py
num1=5
operate=**
num2=7
请重新其他输入简单的运算符+,-,*,/
Process finished with exit code 0
b.加了模块后除法的精确运算
[kiosk@foundation39 1]$ python yunsuan.py
num1=5
operate=/
num2=3
1.66666666667
In [1]: num = 1L##强制把1定义为长整型
In [2]: type(num)
Out[2]: long
In [3]: a='''##'''格式化输出
...: jaja
...: xixi
...: wq
...: 123
...: '''
In [4]: print a
jaja
xixi
wq
123
In [5]: a='hello westos'
In [6]: a[0]##查询a字符串的第0个字母
Out[6]: 'h'
In [7]: a[0:4:2]##从0开始到4结束,步长为2
Out[7]: 'hl'
In [8]: a[-4:-1:2]##-4即从最后开始数,最后一位是-1
Out[8]: 'so'
In [9]: a[-4:-1:1]
Out[9]: 'sto'
In [10]: b='aqqehw'
In [11]: b[5]+b[2]+b[0]##b的第5第2第0位相取
Out[11]: 'wqa'
In [12]: t='123','qwe','sa'##如果用,隔开那么取整块
In [13]: t[1]
Out[13]: 'qwe'
本文转自AELY木博客51CTO博客,原文链接http://blog.51cto.com/12768057/1942057如需转载请自行联系原作者
AELY木