python从入门到精通(DAY 1)


Posted in Python onDecember 20, 2015

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源码对数字的定义如下:

python从入门到精通(DAY 1)

    (4) python内部执行过程:

python从入门到精通(DAY 1)

    (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'
Python 相关文章推荐
Python入门_学会创建并调用函数的方法
May 16 Python
遗传算法之Python实现代码
Oct 10 Python
PyCharm 常用快捷键和设置方法
Dec 20 Python
对python程序内存泄漏调试的记录
Jun 11 Python
Django 路由系统URLconf的使用
Oct 11 Python
关于python多重赋值的小问题
Apr 17 Python
运用PyTorch动手搭建一个共享单车预测器
Aug 06 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
python基于机器学习预测股票交易信号
May 25 Python
python编程实现清理微信重复缓存文件
Nov 01 Python
Pygame Time时间控制的具体使用详解
Nov 17 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 #Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 #Python
使用Python编写简单的端口扫描器的实例分享
Dec 18 #Python
十个Python程序员易犯的错误
Dec 15 #Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 #Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 #Python
分享Python字符串关键点
Dec 13 #Python
You might like
PHP 文件上传功能实现代码
2009/06/24 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
js 操作select和option常用代码整理
2012/12/13 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
Python进行统计建模
2020/08/10 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
电大自我鉴定
2013/10/27 职场文书
书法培训心得体会
2014/01/05 职场文书
简历自我评价模版
2014/01/31 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
预防煤气中毒方案
2014/06/16 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
现货白银电话营销话术
2015/05/29 职场文书
毕业典礼主持词
2015/06/29 职场文书