python基础

语句和语法

注释及续行

首要说明的是:尽管python可读性最好的语言之一,这并不意味者程序员在代码中就可以不写注释

和很多UNIX脚本类似,python注释语句从#字符开始

注释可以在一行的任何地方开始,解释器会忽略掉该行#之后的所有内容

一行过长的语句可以使用反斜杠\分解成几行

缩进及代码组

缩进相同的一组语句构成一个代码块,称之为代码组

首行以关键字开始,以冒号:结束,该行之后的一行或多行代码构成代码组

如果代码组只有一行,可以将其直接写在冒号后面,但是这样的写法可读性差,不推荐

同行多个语句

分号;允许你将多个语句写在同一行上

但是这些语句不能在这行开始一个新的代码块

因为可读性差,所以不推荐使用

>>> a = 3;print a

3

>>> x = 3;def foo(): print x

File "", line 1

x = 3;def foo(): print x

^

SyntaxError: invalid syntax

变量赋值

赋值运算符

python语言中,等号=是主要的赋值运算符

赋值并不是直接将一个值赋给一个变量

在python中,对象是通过引用传递的。在赋值时,不管这个对象十新创建的,还是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量

python也支持链式多重赋值

>>> x=y=1

>>> x

1

>>> y

1

增量赋值

从python 2.0开始,等号可以和一个算数运算符结合在一起,将计算结果重新赋值给左边的变量,这被称为增量赋值

>>> x=1

>>> x=x+1

>>> x

2

>>> x += 1

>>> x

3

>>> x++

File "", line 1

x++

^

SyntaxError: invalid syntax

>>> ++x

3        多元赋值

另一种将多个变量同时赋值的方法称为多元赋值,采用这种方式赋值时,等号两边的对象都是元组

>>> x,y,z=1,2,‘a string‘

>>> print ‘x=%d,y=%d‘ %(x,y)

x=1,y=2

>>> x,y = y,x

>>> print ‘x=%d,y=%d‘ %(x,y)

x=2,y=1标识符

合法的标识符

python 标识符字符串规则和其他大部分用C编写的高级语言相似

第一个字符必须十字母或下划线(_)

剩下的字符可以使字母和数字或下划线

大小写敏感

关键字

和其它的高级语言一样,python也拥有一些被称作关键字的保留字符

任何语言的关键字应该保持相对的稳定,但是因为python是一门不断成长和进化的语言,其关键字偶尔会更新

关键字列表和iskyward()函数都放入了keyword模块以便查阅

>>> import keyword

>>> keyword.iskeyword("if")  #判断if是不是关键字

True

>>> keyword.kwlist

[‘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‘]

>>>        内建

除了关键字之外,python还有可以在任何一级代码使用的“内建”的名字集合,这些名字可以由解释器设置或使用

虽然built-in不是关键字,但是应该把它当作“系统保留字”

保留的常量如:True、False、None

>>> len = 10

>>> len(‘abcdf‘)

Traceback (most recent call last):

File "", line 1, in

TypeError: ‘int‘ object is not callable

>>> del len

>>> len

>>> len(‘abcdf‘)

5    基本风格

模块结构及布局

编写程序时,应该建立一个统一且容易阅读的结构,并将它应用到每一个文件中去

#!/usr/bin/env python  #起始行

"this is a test module"  #模块文档字符串

import sys               #导入模块

import os

debug = True             #全局变量声明

class FooClass(object):  #类定义

‘Foo class’

pass

def test():              #函数定义

"test function"

foo = FooClass()

if __name__ == ‘__main__‘: #程序主体

test()

主程序中的测试代码

优秀的程序员和软件工程师,总是会为其应用程序提供一组测试代码或者简单教程

测试代码仅当该文件被直接执行时运行,即被其他模块导入时不执行

利用__name__ 变量这个有力条件,将测试代码放在一个函数中,如果该模块是被当成脚本运行,就调用这个函数

练习:创建文件

1、编写一个程序,要求用户输入文件名

2、如果文件已经存在,要求用户重新输入

3、提示用户输入数据,每行数据先写到列表中

4、将列表数据写入到用户输入的文件中

#!/usr/bin/env python

import os

contents = []

while True:

fname = raw_input("Plz input a file name: ")

if not os.path.exists(fname):

break

print "%s already exists.Try again." % fname

while True:

data = raw_input("(Enger to quit)> ")

if  not data:

break

contents.append(data + ‘\n‘)

fobj = open(fname,‘w‘)

fobj.writelines(contents)

fobj.close()升级版:(改成函数模式)

#!/usr/bin/env python

import os

def get_fname():

while True:

fname = raw_input("Plz input a file name: ")

if not os.path.exists(fname):

break

print "%s already exists.Try again." % fname

return fname

def get_contents():

contents = []

while True:

data = raw_input("(Enger to quit)> ")

if  not data:

break

contents.append(data + ‘\n‘)

return contents

def wfile():

fobj = open(fname,‘w‘)

fobj.writelines(contents)

fobj.close()

if __name__ == ‘__main__‘:

filename = get_fname()

lines = get_contents()

wfile(filename,lines)

python 对象

python对象基础

python对象特性

所有的python对象都拥有三个特性:

- 身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到

>>> a = 3

>>> b = 3

>>> id(a)

146065560

>>> id(b)

146065560

- 类型:决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。用内建函数type()查看对象的类型

>>> a = 1

>>> type(a)

>>> a = ‘hello‘

>>> type(a)

>>> a = []

>>> type(a)

- 值:对象表示的数据项

python对象属性

某些python对象有属性、值或相关联的可执行代码

用.标记法来访问属性

最常用的属性是函数和方法,不过有一些python类型也有数据属性

含有数据属性的对象包括(但不限于):类、类实例、模块、复数和文件

python对象类型

标准类型

数字

- 整型

- 长整形

- 布尔型

- 浮点型

- 复数型

字符串

列表

元组

字典

其他内建类型

在python开发时,还可能用到的数据类型有:

- 类型

- Null对象(None)

- 文件

- 集合/固定集合

- 函数/方法

- 模块

- 类

内部类型

以下类型通常用不到,只是为了知识的完整性,简要的列出:

- 代码

- 帧

- 跟踪记录

- 切片

- 省略

- xrange

标准类型运算符

对象值的比较

运算符功能

expr1  < expr2expr1小于expr2

expr1 > expr2expr1 大于expr2

expr1 <= expr2expr1 小于等于expr2

expr1 >= expr2expr1 大于等于expr2

expr1 == expr2expr1 等于expr2

expr1 != expr2expr1 不等于expr2

expr1 <> expr2expr1 不等于expr2

对象身份比较

对象可以通过引用被赋值到另一个变量

因为每个变量都指向同一个(共享的)数据对象,只要任何一个引用发生改变,该对象的其他引用也会随之改变

>>> aList = [‘hello‘,‘bob‘]

>>> bList = aList

>>> id(aList)

3071001644L

>>> id(bList)

3071001644L

>>> bList[1] = ‘tom‘

>>> aList

[‘hello‘, ‘tom‘]

布尔逻辑运算符

not运算符拥有最高优先级,只比所有比较运算符低一级

and 和 or 运算符则相应的在低一级

运算符功能

not exprexpr的逻辑非(否)

expr1 and expr2expr1 和expr2 的逻辑与

expr1 or expr2expr1 和expr2的逻辑或

数字

数字简介

创建数值对象并赋值

数字提供了标量贮存和直接访问

创建数值对象和给变量赋值一样简单

>>> anint = 1

>>> aLong = -9999999999999999999999L

>>> aFloat = 3.141325677839900349

>>> aComplex = 1.23 + 4.56J

更新数字对象

数字是不可变类型,也就是说变更数字的值会生成新的对象

在python中,变量更像一个指针指向装变量值的盒子

对不可变类型来说,你无法改变盒子的内容,但你可以将指针指向一个新盒子

>>> i  =3

>>> id(i)

146065560

>>> i = 4

>>> id(i)

146065548

删除数字对象

按照python的法则,无法真正删除一个数值对象,仅仅是不再使用它而已

删除一个数值对象的引用,使用del语句

删除对象的引用之后,就不能再使用这个引用(变量名),除非给它赋一个新值

绝大多数情况下并不需要明确del一个对象

整形

布尔型

该类型的取值只有两个,即True和False

True的数值为1,False的数值为0

在判断语句中,空列表、空元组、空字符串、空字典数值为0的数字以及None皆为Fasle,其他皆为True

>>> True + 2

3

>>> if "hello": print ‘Yes‘

...

Yes

>>> if not []: print ‘yes‘

...

yes

标准整数类型

标准整数类型是最通用的数字类型

python标准整数类型等价于C的(有符号)长整型

整数一般以十进制表示

如果八进制整数以数字“0”开始,十六进制整数以“0x” 或“0X”开始,二进制整数以“0b”或“0B”开始

>>> 0x10

16

>>> 010

8

>>> 0b10

2

长整型

C或其他编译型语言的长整数类型的取值范围是32位或64位

python的长整数类型能表达的数值仅仅与机器支持的(虚拟)内存大小有关

在一个整数值后面加个L(大写或小写都可以),表示这个整数十长整型

这个整数可以是十进制,八进制,或十六进制

运算符

标准类型运算符

在做数值运算时,必须努力保证操作数是合适的数据类型

相同类型数值运算,得到的结果也是该类型的数值

不同类型数值运算,需要(显示或隐式地)做数据类型转换

>>> print 5/3

1

>>> print 5.0 /3

1.66666666667

混合模式运算符

算术运算符

python支持单目运算符正号(+)和负号(-)

双目运算符,+、-、*、/、%,还有**,分别表示加法,减法,乘法,除法,取余和幂运算

从python2.2起,还增加了一种新的整除运算符//,即地板除

>>> print 3.0/2

1.5

>>> print 3.0 // 2

1.0

>>> print round(3.0/2)

2.0

位运算符

位运算符只适用于整数

位运算符功能

~num单目运算,对数的每一位取反

num1 << num2num1 左移 num2位

num1 >> num2num1 右移num2位

num1 & num2num1 与num2按位与

num1 ^ num2num1 异或 num2(相同为0,不同为1)

num1 | num2num1 与num2 按位或

内建函数

标准类型函数

cmp(num1,num2)

- num1 大于num2结果为正值

- num1 小于num2 结果为负值

- num1 等于num2 结果为0

str(num):将num转换成字符串表示格式

type(obj):判断obj类型

数字类型函数

函数int(),long(),float()和complex()来将其它数值类型转换为相应的数值类型

int(‘11‘) 默认十进制

int(‘11‘,base=2) 二进制

int(‘11‘,base=16)十六进制

abs():返回给定参数的绝对值;abs(10),abs(-10)

divmod():内建函数把除法和取余运算结合起来,返回一个包含商和余数的元组

>>> divmod(5,3)

(1, 2)

pow():进行指数运算

>>> pow(3,2)

9

>>> pow(2,3)

8

round():用于对浮点数进行四舍五入运算

>>> print 5 / 3.0

1.66666666667

>>> print round(5 / 3.0)

2.0

>>> print round(5 / 3.0,2)  #保留两位小数点。

1.67

仅用于整数的函数

hex():转换为字符串形式的十六进制数  eg:ex(100)

oct():转换为字符串形式的八进制数  eg:oct(100)

bin():转换为字符串形式的二进制数  eg: bin(100)

ord():接受一个字符,返回其对应的ASCII值  eg:ord(‘a‘)

chr():接受一个单字节ASCII码整数值,返回一个字符串 eg:chr(65)

模块psutil的使用

pip install psutil

import tab

import psutil

psutil.

psutil.users()

psutil.used_phymem()

psutil.used_phymem() / 1024 / 1024

import os

os.system(‘free -m‘)

psutil.boot_time()

import time

psutil.disk_partitions()

psutil.disk_partitions()[0]

a = psutil.disk_partitions()[0]

type(a)

a.mountpoint

# pip install ecdsa

# pip install pycrypto

一个修改密码的脚本

#!/bin/bash

if [ -z "$3"]; then

echo "Usage: $0 ipfile oldpass newpss"

exit 1

fi

ipfile=$1

oldpass=$2

newpass=$3

if [ ! -f $ipfile ]; then

ehco "$ipfile does not exists"

exit 2

fi

for ip in $(cat $ipfile)

do

expect << EOF

spawn ssh [email protected] "echo $newpass | passwd --stdin root"

expect "(yes/no)?"{

send "yes\r"

expect "password:"

send "$oldpass\r"

} "password:" {send "$oldpass\r"}

expect eof

EOF

done

python程序实现(改密码/执行远程命令)

#!/usr/bin/env python

import sys

import paramiko

def remote_comm(host,pwd,comm):

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(host,username=‘root‘,password=pwd)

stdin,stdout,stderr = ssh.exec_command(comm)

print stdout.read()

print stdout.read()

if __name__ ==‘__main__‘:

if len(sys.argv) != 4:

print "Usage: %s ipfile oldpass newpass" %sys.argv[0]

else:

ipfile =  sys.argv[1]

oldpass = sys.argv[2]

newpass = sys.argv[3]

ch_pwd = "echo %s | passwd --stdin root" % newpass

fobj = open(ipfile)

for line in fobj:

ip = line.strip()   #去除字符串两端空白

remote_comm(ip,oldpass,ch_pwd)

多线程版python(改密码/执行远程命令)

#!/usr/bin/env python

import sys

import paramiko

import threading

def remote_comm(host,pwd,comm):

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(host,username=‘root‘,password=pwd)

stdin,stdout,stderr = ssh.exec_command(comm)

print stdout.read(),

print stderr.read(),

if __name__ ==‘__main__‘:

if len(sys.argv) != 4:

print "Usage: %s ipfile oldpass newpass" %sys.argv[0]

else:

ipfile =  sys.argv[1]

oldpass = sys.argv[2]

newpass = sys.argv[3]

ch_pwd = "echo %s | passwd --stdin root" % newpass

fobj = open(ipfile)

for line in fobj:

ip = line.strip()   #去除字符串两端空白

t = threading.Thread(target=remote_comm,args=(ip,oldpass,ch_pwd

))

t.start()

原文:http://sailq21.blog.51cto.com/6111337/1858651

python内建函数测试对象身份_python 学习笔记day03-python基础、python对象、数字、函数...相关推荐

  1. python内建函数测试对象身份_Python学习笔记 03 Python对象

    1.Python对象 Python对象都拥有三个特性:身份.类型和值. 身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份都可以使用内建函数id()来得到.这个值可以被认为是该对象的内存地址. ...

  2. python元组读取到列表_Python 学习笔记(1)Python容器:列表、元组、字典与集合...

    Python容器:列表.元组.字典与集合 列表: 1.列表 的创建 使用[ ] 或者list()创建列表:empty_list = [ ] 或者 empty_list= list() 使用list() ...

  3. python安装盒怎么打开_Python学习笔记(六)Python盒子:模块,包和程序

    关于独立的程序: 我们可以将编写的代码放到一个文本里,并将文件名命名为xxx.py的形式.如果想要运行程序,直接在终端或者命令终端输入 python xxx.py. 命令行参数 我们编写文件test. ...

  4. python第三方库中函数调用_Python学习笔记(2)——Python的函数、模块、包和库...

    初识Python,对于没有接触过编程的我,恐怕只能听懂什么是函数,这里介绍一下几个概念,并给出Python在调用方面的独特之处. 函数 理解为数学上的函数就可以了.下载安装完python后,并不是所有 ...

  5. 大数据HiveSQL学习笔记三-查询基础语法以及常用函数

    大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...

  6. python中sn的意思_python学习笔记

    学习资料:<简明 Python 教程.pdf>Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程. 特点:1.简单 2.易学 3.开源, ...

  7. python编程16章教程_Python学习笔记__16.2章 TCP编程

    # 这是学习廖雪峰老师python教程的学习笔记 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算 ...

  8. python里while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  9. python中if语句使用_Python学习笔记之if语句的使用示例

    前言 条件语句在实际开发中我们已经使用过几次了,在这里我们需要再次隆重的来介绍一下它,下面话不多说了,来一起看看详细的介绍吧. if语句 顾名思义,该语句为判断语句,先来一个简单的示例 cars=[' ...

最新文章

  1. LeetCode实战:字符串转换整数 (atoi)
  2. 计算机应用基础dos,计算机应用基础2(带答案)
  3. postfix文档修正
  4. ltp makefile 解析
  5. c++ winpcap开发(8)
  6. 各个JSON技术的比较(Jackson,Gson,Fastjson)的对比
  7. .NET的委托和匿名函数应用一例
  8. python2与pyrhon3的区别,python—文件操作,函数练习题
  9. NFA转DFA程序设计
  10. SoyNet:大豆叶部病害分类(研究思路清晰)
  11. ExtJS视频学习笔记
  12. android studio开启multiDexEnabled后依然出现超出方法数的问题
  13. 循序渐进之Spring AOP(2) - 基本概念
  14. app客户端上传图片实现方式
  15. Linux性能优化(七)——网络流量监控工具
  16. 列表 元组 字典的概念及其案例
  17. cpu显示无效查询 wmic_Windows WMIC命令使用详解(附实例)
  18. Arduino嵌入式开发
  19. Java violate变量
  20. Linux · 教程

热门文章

  1. HMCL支持什么java_最好用的Java版启动器HMCL
  2. HTML5/CSS3图片左右切换弹性动画
  3. CentOS 6.5下搭建Maven私服nexus
  4. 六、给校园网配置外网
  5. 关于Corel Vstudio8(会声会影x8)打开出现service pack 3的弹出框
  6. java mht转html文件
  7. mc幻想乡java_我的世界1.7.10幻想乡整合包
  8. 用python爬取伯乐在线的准备
  9. Preparing for Complete Database Recovery
  10. 读《华为的思维》有感