python从入门到精通(DAY 1)

1、要点

(1) 在C语言中没有字符串,只有字符,

在python中的字符串hello,在C语言中是以字符数组在内存存放['h','e','l','l','o'],如果对字符串修改,则是在内存中新开辟了一段空间进行存放。

字符串特性:一旦修改,需要重新创建。

例: "hello" + "ni" + "hao"      内存中:['h','e','l','l','o'] + ['n','i'] + ['h','a','o']

万恶的“+”,“+”号越多,在内存中多次重复创建,浪费空间。

C语言需要手动回收,而python,C#等高级语言自带虚拟机会进行GC垃圾回收没有被调用的内存访问空间。

(2) python字符串的格式化(占位符)可以节省内存空间,有如下二种方式,例:

说明:第二种format方式的效果会更好,性能更好,其实变量a的值没有变,在格式化赋值时会在内存中新开辟空间存放。在python2.7和python3.4中测试结果相同

 >>> a = 'i am %s,age is %d'
>>> a % ('wangkai',33)
'i am wangkai,age is 33'
>>> print(a)
i am %s,age is %d

>>> a = 'i am {0},age is {1}'
>>> a.format('wangkai',33)
'i am wangkai,age is 33'
>>> print(a)
i am {0},age is {1}

(3) 在python中会生成一个缓存池来节省内存空间,主要存放经常用到的字符串及数字,所以在一定范围内对变量赋同样的值,他们的id值是一样的,当超出这个池的时候,id值则会不同

分别在python2.7和python3.4版本中进行测试,测试结果如下:(经测试在python2.7和python3.4中效果一样)

针对字符串,无限制

>>> a = 'asdfsafsafasfsafasdfasfasfasf'
>>> b = 'asdfsafsafasfsafasdfasfasfasf'
>>> id(a),id(b)
(140704388394128, 140704388394128)
>>> a = 'ni'
>>> b = 'ni'
>>> id(a),id(b)
(140704388417416, 140704388417416)

针对数字,范围:小于-5,大于256

>>> a = -5
>>> b = -5
>>> id(a),id(b)
(8745920, 8745920)

>>> a = -6
>>> b = -6
>>> id(a),id(b)
(140718131946128, 140718131946320)

>>> aa=256
>>> bb=256
>>> id(aa),id(bb)
(8754272, 8754272)

>>> aa = 257
>>> bb = 257
>>> id(aa),id(bb)
(19083048, 18637656)

具体python源码对数字的定义如下:

(4) python内部执行过程:

(5) print说明:

Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。

特别说明:经测试在python2.6、python2.7,print作为语句,但已支持括号方式,例:a = 1 print a print(a)均可;

在python3.4版本中,print作为函数,只支持括号方式。

建议:为了代码在python2和3上的兼容性,请直接使用print函数括号方式。

2、编码转换

一般硬盘存储为utf-8,读入内存中为unicode,二者如何转换

a = '你好'              '\xe4\xbd\xa0\xe5\xa5\xbd'     <type 'str'>

b = u'你好'             u'\u4f60\u597d'                <type 'unicode'>

a.decode('utf-8')       u'\u4f60\u597d'   (utf-8格式解码为unicode)

b.encode('utf-8')       '\xe4\xbd\xa0\xe5\xa5\xbd'  (unicode格式加密为utf-8)

注:在python2.7版本中需要如上转换,在脚本中如要显示中文,

只要在文件开头加入 # _*_ coding: UTF-8 _*_ 或者 #coding=utf-8 就行了

在python3.4以后版本,无需转换

 3、调用系统命令,并存入变量:

1.import os

a = os.system('df -Th')

b = os.popen('df -Th','r') 返回一个文件对象

2.import commands

c = commands.getoutput('df -Th')  返回一个字符串

4、sys调用

import sys

sys.exit

print sys.argv

sys.path

5、导入模板方法:

1.import sys [as newname]

多次重复使用import语句时,不会重新加载被指定的模块,只是把对该模块的内存地址给引用到本地变量环境。

2.from sys import argv或(*)

3.reload()

reload会重新加载已加载的模块,但原来已经使用的实例还是会使用旧的模块,而新生产的实例会使用新的模块;reload后还是用原来的内存地址;不能支持from。。import。。格式的模块进行重新加载。

建议使用第一种,第二种导入的对象或变量会与当前的变量会冲突。

6、用户交互:

在python2.7版本中

raw_input:交互输入内容转化为字符串;

input:交互输入内容不进行转化;

在python3.4版本中只有input,想要获取数字,需要进行int转变。

举例:

#_*_ coding:utf-8 _*_

info = 'This var will be printed out ...'
name = raw_input('Please input your name:')
age = int(raw_input('age:'))
#age = input('age:')
job = raw_input('Job:')
salary = input('Salary:')
print type(age)

print '''
Personal information of %s:
     Name: %s
     Age : %d
     Job : %s
    Salary: %d
--------------------------
''' % (name,name, age,job,salary)

7、用户输入内容隐藏:

输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:

>>> import getpass
>>> pwd = getpass.getpass("please input the passwd:")
please input the passwd:
>>> print(pwd)
asdfasdfa

8、文件操作:  

python2.7版本中可以用file和open打开文件,  python3.4版本中只有open

f = open('file_name','r')

g = file('file_name','r')

其中打开模式有'r','w,','a','b','+'

w:替换重写   a:追加

b:二进制文件,主要用于跨平台,来解决window和linux的回车换行区别

+:用于同时读写

* 一般会对文件读到的第一行去掉末尾的换行符      f.readline().strip('\n')

* xreadlines:针对大文件,一行一行读,默认是把全文件读入内存。

* r+ :读写,默认从文件尾写入,可以由seek跳到指定位置,然后替换文件内容。

初始文件aa.txt

kevin:123:1
wang:22:2
kai:311:3

对python2.7和python3.4测试结果一样。

# _*_ coding: UTF-8 _*_

import sys,os
file = sys.argv[1]

f = open(file,'r+')
line_list = f.readlines()

new_list = []
for line in line_list:
  #去掉行尾的换行符
  line = line.strip('\n')
  #对行信息按分隔符进行分列
  value_list = line.split(':')

  #获取最后一字段并数字化
  last_value = int(value_list[-1])
  #对最后一字段进行数字计算
  last_value *= 13

  value_list[-1] = str(last_value)
  #将列表转变为字符串
  new_str = ':'.join(value_list)
  #将循环的改变后的行追加到新的列表
  new_list.append(new_str)
'''
  ######第一种方法按行追加到文件#####
  #按修改后的行追加到文件中
  #f.writelines(new_str + '\n')
'''
'''
#####第二种方法将所有行统一追加到文件#####
#将所有修改后的新列表转化为字符串
my_str = '\n'.join(new_list)
#将指标移到行首
f.seek(0)
#将写回到文件
f.write(my_str + '\n')
'''
f.close()

9、类型转变:

Python 有办法将任意值转为字符串:将它传入repr() 或str() 函数。

函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式(如果没有等价的
语法,则会发生SyntaxError 异常) 某对象没有适于人阅读的解释形式的话, str() 会返回与repr()等同的值。很多类型,诸如数值或链表、字典这样的结构,针对各函数都有着统一的解读方式。字符串和浮点数,有着独特的解读方式。
Some examples:

下面有些例子

>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"
>>> str(1.0/7.0)
'0.142857142857'
>>> repr(1.0/7.0)
'0.14285714285714285'
(0)

相关推荐

  • Python3 入门教程 简单但比较不错

    本文适合有Java编程经验的程序员快速熟悉Python 本文程序在windows xp+python3.1a1 测试通过. 本文提到的idle指python shell,即安装python后你在菜单看到的IDLE(python gui) 在idle里ctrl+n可以打开一个新窗口,输入源码后ctrl+s可以保存,f5运行程序. 凡打开新窗口即指ctrl+n的操作. 1 你好 复制代码 代码如下: #打开新窗口,输入: #! /usr/bin/python # -*- coding: utf8 -

  • 零基础写python爬虫之爬虫编写全记录

    先来说一下我们学校的网站: http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html 查询成绩需要登录,然后显示各学科成绩,但是只显示成绩而没有绩点,也就是加权平均分. 显然这样手动计算绩点是一件非常麻烦的事情.所以我们可以用python做一个爬虫来解决这个问题. 1.决战前夜 先来准备一下工具:HttpFox插件. 这是一款http协议分析插件,分析页面请求和响应的时间.内容.以及浏览器用到的COOKIE等. 以我为例,安装在火狐上即可,效果如图:

  • 零基础写python爬虫之使用Scrapy框架编写爬虫

    网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便.使用Scrapy可以很方便的完成网上数据的采集工作,它为我们完成了大量的工作,而不需要自己费大力气去开发. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目标(Item

  • Python学习笔记(一)(基础入门之环境搭建)

    Python入门 本系列为Python学习相关笔记整理所得,IT人,多学无害,多多探索,激发学习兴趣,开拓思维,不求高大上,只求懂点皮毛,作为知识储备,不至于落后太远.      本文主要介绍Python的相关背景,环境搭建. 一.了解Python 1,关于Python的语言特点: 借用Python官网Https://www.python.org的解释: Python is powerful... and fast; plays well with others; runs everywhere

  • Python中的Numpy入门教程

    1.Numpy是什么 很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数.如果接触过matlab.scilab,那么numpy很好入手. 在以下的代码示例中,总是先导入了numpy: 复制代码 代码如下: >>> import numpy as np>>> print np.version.version1.6.2

  • Python入门篇之函数

    Pythond 的函数是由一个新的语句编写,即def,def是可执行的语句--函数并不存在,直到Python运行了def后才存在. 函数是通过赋值传递的,参数通过赋值传递给函数 def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: 复制代码 代码如下: def function_name(arg1,arg2[,...]):     statement [return value] 返回值不是必须的,如果没有return语句,则Python默认返回值None. 函数名的命

  • Python类的基础入门知识

    复制代码 代码如下: class Account(object): "一个简单的类" account_type="Basic" def __init__(self,name,balance): "初始化一个新的Account实例" self.name=name self.balance=balance def deposit(self,amt): "存款" self.balance=self.balance+amt def w

  • python从入门到精通(DAY 1)

    1.要点 (1) 在C语言中没有字符串,只有字符, 在python中的字符串hello,在C语言中是以字符数组在内存存放['h','e','l','l','o'],如果对字符串修改,则是在内存中新开辟了一段空间进行存放. 字符串特性:一旦修改,需要重新创建. 例: "hello" + "ni" + "hao"      内存中:['h','e','l','l','o'] + ['n','i'] + ['h','a','o'] 万恶的"+

  • python从入门到精通 windows安装python图文教程

    Python的官方介绍是: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发. Python的特色 (1)简单 Python是一种代表简单主义思想的语言.阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一.它使你能够专

  • python从入门到精通(DAY 2)

    1.字典复制: dict = {'name':'wang', 'sex':'m', 'age':34, 'job':'it'} info = dict ##别名 (二个字典指向内存的同一地址空间) info1 = dict.copy() #shadow copy 浅复制(嵌套字典第一层独立,第二层以下相关联) import copy copy.copy() #shadow copy 浅复制 copy.deepcopy() #deep copy 深复制(完全独立) 注:浅复制下的关联只是针对字典初

  • python从入门到精通(DAY 3)

    要求:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 针对此实例写了有二种类型的脚本,略有不同,具体如下: 帐号文件account.txt内容如下: sam 123 david 12 kevin 123 lin 12 tailen 123 jack 12 锁文件account_lock.txt默认为空 一.只针对帐号文件里的用户进行判断并锁定,针对用户和密码各有三次错误重试机会. 1.流程图如下: 代码如下: #!/usr/bin/python27 #_*_ coding:

  • for 语句从入门到精通

    for语句从入门到精通 一 前言 二 for语句的基本用法 三 for /f 含变量延迟 四 for /r 五 for /d 六 for /l 一.前言 在批处理中,for是最为强大的命令语句,它的出现,使得解析文本内容.遍历文件路径.数值递增/递减等操作成为可能:配合if.call.goto等流程控制语句,更是可以实现脚本复杂的自动化.智能化操作:合理使用for语句,还能使代码大为简化,免除各位编写大量重复语句之苦.而能否熟练使用for语句,已经成为衡量一个人批处理水平高低最主要的标准. 在这

  • Mybatis实战教程之入门到精通(经典)

    什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 ses

  • Python简明入门教程

    本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数--整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数不过是大一些的整数. (2)3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4. (4)(-5+4j)和(2.3-4.6j)是复数的例子. 2.字符串 (1)使用单引号(') (2)使用双引号(") (3)使用三引号('''或"&q

  • Python编程入门之Hello World的三种实现方式

    本文实例讲述了Python编程入门之Hello World的三种实现方式.分享给大家供大家参考,具体如下: 第一种方式: $python >>>print('hello world') 屏幕上输出hello world print是一个常用函数 第二种方式: 复制代码 代码如下: $python hello.py 第三种方式: #!/usr/bin/env python chmod 755 hello.py ./hello.py 希望本文所述对大家Python程序设计有所帮助.

  • python爬虫入门教程--优雅的HTTP库requests(二)

    前言 urllib.urllib2.urllib3.httplib.httplib2 都是和 HTTP 相关的 Python 模块,看名字就觉得很反人类,更糟糕的是这些模块在 Python2 与 Python3 中有很大的差异,如果业务代码要同时兼容 2 和 3,写起来会让人崩溃. 好在,还有一个非常惊艳的 HTTP 库叫 requests,它是 GitHUb 关注数最多的 Python 项目之一,requests 的作者是 Kenneth Reitz 大神. requests 实现了 HTTP

  • PSPad从入门到精通(PSPad Inside)[

    From:http://www.blog.edu.cn/user2/jashy/archives/2006/1264853.shtml PSPad从入门到精通(PSPad Inside) ------------------------------- PSPad什么意思? 一款优秀的编辑器,宣传一般是很差劲的.PSPad也是如此.基本找不到关于PSPad含义的表述, 也很少有人问.一个中国的网友猜测, 可能是Programmer'S Pad.如若真的如此, 这种用法只有在非英语国家才可能有,也只

随机推荐