python 学习笔记day03-python基础python对象数字函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 学习笔记day03-python基础python对象数字函数相关的知识,希望对你有一定的参考价值。

python基础

    语句和语法

        注释及续行

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

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

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

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

        缩进及代码组

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

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

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

        同行多个语句

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

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

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

                >>> a = 3;print a
                3
                >>> x = 3;def foo(): print x
                  File "<stdin>", 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 "<stdin>", 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 "<stdin>", line 1, in <module>
                TypeError: ‘int‘ object is not callable

                >>> del len
                >>> len
                <built-in function 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)
                    <type ‘int‘>
                    >>> a = ‘hello‘
                    >>> type(a)
                    <type ‘str‘>
                    >>> a = []
                    >>> type(a)
                    <type ‘list‘>

                - 值:对象表示的数据项

        python对象属性

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

            用.标记法来访问属性

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

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

    python对象类型

        标准类型

            数字

                - 整型

                - 长整形

                - 布尔型

                - 浮点型

                - 复数型

            字符串

            列表

            元组

            字典

        其他内建类型

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

                - 类型

                - Null对象(None)

                - 文件

                - 集合/固定集合

                - 函数/方法

                - 模块

                - 类

        内部类型

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

                - 代码

                - 帧

                - 跟踪记录

                - 切片

                - 省略

                - xrange

    标准类型运算符

            对象值的比较

运算符
功能
expr1  < expr2
expr1小于expr2
expr1 > expr2
expr1 大于expr2
expr1 <= expr2
expr1 小于等于expr2
expr1 >= expr2
expr1 大于等于expr2
expr1 == expr2
expr1 等于expr2
expr1 != expr2
expr1 不等于expr2
expr1 <> expr2
expr1 不等于expr2

            对象身份比较

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

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

                    >>> aList = [‘hello‘,‘bob‘]
                    >>> bList = aList
                    >>> id(aList)
                    3071001644L
                    >>> id(bList)
                    3071001644L
                    >>> bList[1] = ‘tom‘
                    >>> aList
                    [‘hello‘, ‘tom‘]

            布尔逻辑运算符

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

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

运算符
功能
not expr
expr的逻辑非(否)
expr1 and expr2
expr1 和expr2 的逻辑与
expr1 or expr2
expr1 和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 << num2
num1 左移 num2位
num1 >> num2
num1 右移num2位
num1 & num2
num1 与num2按位与
num1 ^ num2

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

num1 | num2
num1 与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.<tab><tab>

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()

本文出自 “linux服务器” 博客,请务必保留此出处http://sailq21.blog.51cto.com/6111337/1858651

以上是关于python 学习笔记day03-python基础python对象数字函数的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记Python基础教程学习笔记

Python学习笔记,Day1-基础1

Python学习笔记-基础Day01

python学习笔记:基础Day03

python 学习笔记day06-错误和异常函数基础

Day3: Python学习笔记之计算机基础——网络片