“路飞学城alex” utf8占16位字节,gbk 占12位字节。
2. python有哪几种数据类型,分别什么?哪些数据类型是有序的。
python有:字符串、列表、元组、集合、字典、布尔 六种类型 。 其中字典是无序的。集合中有字典就是无序集合。
3. 列表和字典的pop方法有什么区别。
read 读取整个文件
readline 读取下一行
readlines 读取整个文件到一个迭代器以供我们遍历(读取到一个list中,以供使用,比较方便)、
2. 执行f.write()之后,会立刻写入磁盘吗?不会的话,有几种方式能让其写入磁盘中?
当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,
操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,
还是用with语句来得保险:
with open('/Users/michael/test.txt', 'w') as f:
-
f.write('Hello, world!')
3. 简述内置函数globals() locals()的作用 (口述)
这两个函数主要提供,基于字典的访问局部和全局变量的方式。
在理解这两个函数时,首先来理解一下python中的名字空间概念。Python使用叫做名字空间的
东西来记录变量的轨迹。名字空间只是一个字典,它的键字就是变量名,字典的值就是那些变
量的值。实际上,名字空间可以象Python的字典一样进行访问
每个函数都有着自已的名字空间,叫做局部名字空间,它记录了函数的变量,包括函数的参数
和局部定义的变量。每个模块拥有它自已的名字空间,叫做全局名字空间,它记录了模块的变
量,包括函数、类、其它导入的模块、模块级的变量和常量。还有就是内置名字空间,任何模
块均可访问它,它存放着内置的函数和异常。
当一行代码要使用变量 x 的值时,Python会到所有可用的名字空间去查找变量,按照如下顺序:
1.局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x,Python将使用
这个变量,然后停止搜索。
2.全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python
将使用这个变量然后停止搜索。
3.内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python将假设 x 是内置函数或变量。
如果Python在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 的异常,同时传递
There is no variable named 'x' 这样一条信息。
创建一个闭包函数需要满足哪几点:
闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。
如果在一个内嵌函数里,对在外部函数内(但不是在全局作用域)的变量进行引用,那么内嵌函数就被认为是闭包(closure)。
定义在外部函数内但由内部函数引用或者使用的变量称为自由变量。
总结一下,创建一个闭包必须满足以下几点:
- 1. 必须有一个内嵌函数
- 2. 内嵌函数必须引用外部函数中的变量
- 3. 外部函数的返回值必须是内嵌函数
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数:
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
我们已经知道,可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function。
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
可以使用isinstance()判断一个对象是否是Iterable对象:
-
如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
-
portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}, {'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'ACME', 'shares': 75, 'price': 115.65} ]
计算购买每支股票的总价
用filter过滤出,单价大于100的股票有哪些
portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75},
{'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}
]
for por_name in portfolio:
print(por_name['name'],'的总价是%s'%(por_name['shares']*por_name['price']))
# print(list(filter(lambda x:x>=100,por_name['price'])))
f =list(filter(lambda x:x['price']>=100,portfolio))
print("股票大于100的有:",f)
2,有如下程序, 请给出两次调用show_num函数的执行结果,并说明为什么:
|
1
2
3
4
5
6
7
8
9
10
|
num = 20
def show_num(x=num):
print(x)
show_num()
num = 30
show_num()
|
如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象,相当于通过“传值’来传递对象,此时如果想改变这些变量的值,可以将这些变量申明为全局变量。
3,有列表 li = [‘alex‘, ‘egon‘, ‘smith‘, ‘pizza‘, ‘alen‘], 请以列表中每个元素的第二个字母倒序排序;
#测试可以取得正确值并能显示成功
#print(sorted(list(map(lambda x:x[1:],li)),key= lambda x:x,reverse=True))
print(sorted(li,key=lambda x:x[1],reverse=True))
4,有名为poetry.txt的文件,其内容如下,请删除第三行;
|
1
2
3
4
5
6
7
|
昔人已乘黄鹤去,此地空余黄鹤楼。黄鹤一去不复返,白云千载空悠悠。晴川历历汉阳树,芳草萋萋鹦鹉洲。日暮乡关何处是?烟波江上使人愁。 |
# 4,有名为poetry.txt的文件,其内容如下,请删除第三行;
# 方法一:
# import os
# p = ‘poetry.txt‘
# file = open(p,‘r‘,encoding=‘utf-8‘)
# print(file)
# pnew = ‘%s.new‘%p
# filenew = open(pnew,‘w‘,encoding=‘utf-8‘)
# str1 = ‘晴川历历汉阳树,芳草萋萋鹦鹉洲。‘
# for i in file:
# if str1 in i:
# i = ‘‘
# filenew.write(i)
# else:
# filenew.write(i)
# file.close()
# filenew.close()
# os.replace(pnew,p)
# 方法二:逐行读取文件
import os
f1=open(‘poetry.txt‘, ‘r‘,encoding=‘utf-8‘)
str=‘晴川历历汉阳树,芳草萋萋鹦鹉洲。‘
with open(‘poetry1.txt‘, ‘w‘, encoding=‘utf-8‘) as f2:
ff1=‘poetry.txt‘
ff2=‘poetry1.txt‘
for line in f1:
if str in line:
line=‘‘
f2.write(line)
else:
f2.write(line)
f1.close()
f2.close()
os.replace(ff2,ff1)
5,有名为username.txt的文件,其内容格式如下,写一个程序,判断该文件中是否存在"alex", 如果没有,则将字符串"alex"添加到该文件末尾,否则提示用户该用户已存在;
|
1
2
3
|
pizzaalexegon |
|
1
2
3
4
5
6
7
8
9
10
11
|
# 5,有名为username.txt的文件,其内容格式如下,写一个程序,# 判断该文件中是否存在"alex", 如果没有,# 则将字符串"alex"添加到该文件末尾,否则提示用户该用户已存在;with open(‘username.txt‘,‘r+‘,encoding=‘utf-8‘) as f:
str1 = ‘alexx‘
i = f.read()
print(i)
if str1 in i:
print("the user already exist in")
else:
f.write(‘\nalexx‘)
|
6,有名为user_info.txt的文件,其内容格式如下,写一个程序,删除id为100003的行;
|
1
2
3
|
pizza,100001
alex, 100002
egon, 100003
|
# 6,有名为user_info.txt的文件,其内容格式如下,
# 写一个程序,删除id为100003的行;
import os
a = ‘user_info.txt‘
b = ‘user_info1.txt‘
with open(a,‘r‘,encoding=‘utf-8‘) as f:
with open(b, ‘w‘, encoding=‘utf-8‘) as f2:
for i in f:
if ‘100003‘ in i:
pass
else:
f2.write(i)
os.replace(b,a)