python从入门到精通(DAY 1)
作者:hebedich 发布时间:2022-08-12 17:26:56
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'


猜你喜欢
- Basemap是matplotlib子包,也是python中最常用、最方便的地理数据可视化工具之一。在中端输入pip list先查看是否有j
- 之一:torchvision 中包含了很多预训练好的模型,这样就使得 fine-tune 非常容易。本文主要介绍如何 fine-tune t
- 选择排序算法步骤:找到数组中最小的那个元素中,将它和数组的第一个元素交换位置,在剩下的元素中找到最小的元素,将它和数组的第二个元素交换位置,
- 正态分布应用最广泛的连续概率分布,其特征是“钟”形曲线。这种分布的概率密度函数为:其中,μ为均值,σ为标准差。求正态分布曲线下面积有3σ原则
- 目标是想把在服务器上用pytorch训练好的模型转换为可以在移动端运行的tflite模型。最直接的思路是想把pytorch模型转换为tens
- 本文实例讲述了php测试kafka项目。分享给大家供大家参考,具体如下:概述Kafka是最初由Linkedin公司开发,是一个分布式、分区的
- MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是100条调节和优化M
- 我们在编写asp程序时经常会使用到这个功能,一般我们这样判断如:if a="" then ,而这个函数考虑的就比较全面了
- IE(internet explorer)公司:微软(MicroSoft)布局引擎:Trident(也做MSHTML)注:解析渲染
- 一段这样的JavaScript代码,猜猜结果如何?var i = 0, m =
- 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多
- Linux默认python命令指向的是/usr/bin下的python,这个python指向同目录下python2,以及pip默认也是pyt
- glob模块实例详解glob的应用场景是要寻找一系列(符合特定规则)文件名。glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定
- 使用webpack搭建单页面程序十分常见,但在实际开发中我们可能还会有开发多页面程序的需求,因此我研究了一下如何使用webpack搭建多页面
- 方法1:/** 功能:数据备份/恢复文件简易方法* 以日期为单位,一天一个备份文件,以当天最后备份为准* 用提交表单的形式进行操作,* 其中
- 如何限制上传文件的大小?要限制上传大小,只需如下设置一个属性即可: &
- 1.首先在index.html引入高德地图的秘钥。如图:注意:如果使用关键字搜索功能要加上 plugin=AMap.Autocomplete
- python实现两个文本合并employee文件中记录了工号和姓名cat employee.txt:100 Jason Smith200 J
- 前言:Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。Matplotlib 是 Pyt
- 本来想等到IE8正式发布时再在blog中写段代码,用来提示IE6用户升级到IE8的,不过貌似IE 8已经RTM了,今天又正好看到这个“升级I