美文网首页
Python基础2

Python基础2

作者: 这货不是王马勺 | 来源:发表于2022-11-18 17:56 被阅读0次

模块

又可称为库。python强大的地方在于他有非常丰富和强大的标准库和第三方库。
以两个sys模块和os模块为例,先看sys:

import sys
print(sys.path)
print(sys.argv)
print(sys.argv[2])

其中“sys.path”这种格式就是指“模块.方法”,文件起名字一定不能导入模块的名字相同。
sys.path是python内部环境变量,使用的模块会在打印结果中寻找,第三方库一般存在lib\site-package里面。
argv显示当前相对路径,
argv[2]表示输出刚刚输入的第二个值(使用python命令行界面,输入python sys1.py a b c,结果会单独显示一个b,输入的第二个值就是列表中第3个值)

os模块:

import os

os.system("dir")

dir在windows上的输出结果会打在屏幕上,执行结果成功实则为0,不能保存结果到变量。

import os

cmd_res = os.popen("dir").read()
print("---->",cmd_res)

os.mkdir("new_dir")

使用popen能将结果存在内存中,如果不加read(),赋给变量的只是一个内存地址,加了read才是我们需要的值。
os.mkdir则是在当前目录新建子目录。

也可以调用自建模块,如我在同目录下有一个login.py的文件,可以直接import login来调用。
如果放在不同目录下的话,需要保证放在环境变量目录中,如size-package下,或者修改环境变量增加一个存放目录。

当我们调用的时候会产生一个.pyc文件(3版本会放在__pycache__目录下),当程序运行时,编译的结果保存在内存中国的PyCodeObject中,当程序运行结束时,Python解释器则将PyCodeObject写回到.pyc文件中。当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到(且pyc比源代码更新时间晚),则直接载入,否则重复上面的过程。
因此pyc文件其实就是PyCodeObject的一种持久化保存方式。
注意编译的结果不是机器码,还差的很多,只是一个二进制文件。

数据类型

数字
int(整型)
64位系统上,整数位数为64位,取值范围是-263~(263-1),在python中取多少次幂用双*表示,如2**32

long(长整型)
python2的长整数没有指定位宽,最大与内存相关,python3中没有长整型,无论存多大都是int。

float(浮点型)
表示形式是小数,类似于C语言中的double类型。

complex(复数)
基本用不到。

布尔值
只有两个值,真或假,对应1或0。

字符串

bytes类型
字节类型和字符串是两回事,字符串使用encode编码,二进制使用decode解码,python中不指定编码格式的话会使用utf-8:

msg='niubi'
print(msg)
print(msg.encode())
print(msg.encode(encoding="utf-8"))
print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))

列表

列表也是一种类型,单独拿出来说一下。
声明方式就是中括号[]:

names = ["wangwenjie","wangxuanzhen","wangyixiao","xialunhao"]
print(names)

取列表的值:

print(names[0])
print(names[0],names[2])
print(names[1:3])  #取连续值,也叫切片,是左闭右开的
print(names[-1])  #取最后一个值
print(names[-2])  #取倒数第二个值
print(names[-3:-1])  #注意都是从左往右取
print(names[-3:])  #冒号后面不写东西表示取到最后一个值
print(names[:3])  #同print(names[0:3])

使用append或insert方法来追加值:

names = ["wangwenjie","wangxuanzhen","wangyixiao","xialunhao"]
names.append("xiejiacheng") #在最后插入
names.insert(4,"xiayunchao") #在指定位置插入
print(names)

不能批量插入,只能一个一个来。

直接修改值:

names[1] = "zhangfuyong"

删除值的方法:

names.remove("zhangfuyong")
del names[1] 
names.pop()       
names.pop(1) 

pop()方法不加数字的话会删掉最后一个值。

其他:

print(names.index("wangyixiao"))  #找位置
print(names[names.index("wangyixiao")])  #找到位置后取出
print(names.count("zhangfuyong")) #计数
names.clear() #清空列表
names.reverse() #反转列表元素的顺序
names.sort() #排序,特殊符号、数字、大写字母、小写字母,就是按ascII码里的顺序来的

names2 = [1,2,3,4]
names.extend(names2)  #合并另一个列表的元素,不会破坏该列表
print(names,names2)

del names2  #删除列表变量

name2 = names.copy #复制
print(name2)

names[1] = "zhangfuyong"
print(name2)  #发现在copy过后,修改原表不会使copy表发生变化

列表中还可以包含子列表:

names = ["yi","er","san",["si","wu"],"liu"]
name2 = names.copy()
print(names)
print(name2)

name[2] = "SAN"
names[3][0] = "SI"
print(names)
print(name2)  
#会发现虽然san没改,但si改成SI了,因为copy仅copy第一层,是由内存中存储方式决定的
names = ["yi","er","san",["si","wu"],"liu"]
name3 = names
name[2] = "SAN"
names[3][0] = "SI"
print(names)
print(name3)
#会发现全都跟着改了

可以看出,将一个列表变量赋给另一个变量,与将字符串或数字赋给一个变量有所不同,列表会跟着变。

如果我们想真正的不受干扰的复制一个列表,我们需要copy模块的深copy,否则copy.copy()仍然是浅copy:

import copy
names = ["yi","er","san",["si","wu"],"liu"]
name2 = copy.deepcopy(names)

浅copy的几种方式:

person=['name',['a',100]]

p1=copy.copy(person)
p2=person[:]
p3=list(person)

列表循环:

names = ["yi","er","san",["si","wu"],"liu"]
for i in names:
  print(i)

列表跳跃切片,以从头到尾每隔一个一输出为例:

names = ["yi","er","san",["si","wu"],"liu"]
print(names[0:-1:2])
print(names[::2])

0和-1是可以省略的

元组类型
元组tuple又称为只读列表,用小括号声明,一旦定义了便不能修改,其只有两个方法,一个是count,一个是index

names = ('a','b')

列表应用示例

product_list = [
  ('iphone',5800),
  ('macbook',9900),
  ('bike',800),
  ('watch',10600),
  ('coffee',31)
]
shopping_list = []

salary = input("input your salary:")
if salary.isdigit():
  salary = int(salary)
  while True:
    for item in product_list:
      print(product_list.index(item),item)
#  break
#    for index,item in enumerate(product_list):
#      print(index,item)
#    break
    user_choice = input("选择要购买的商品编号>>>:")
    if user_choice.isdigit():
      user_choice = int(user_choice)
      if user_choice < len(product_list) and user_choice >= 0:
        p_item = product_list[user_choice]
        if p_item[1] <= salary: #买得起
          shopping_list.append(p_item)
          salary -= p_item[1]
          print("added %s into shopping cart, your current balance is \033[31;1m%s\033[0m" %(p_item,salary))
        else:
          print("\033[41;1m你的余额只剩[%s]了\033[0m"%salary)
      else:
        print("product code [%s] is not exist"%user_choice)
    elif user_choice == 'q':
      print("-----shopping list-----")
      for p in shopping_list:
        print(p)
      print("your current balance is :",salary)
      exit()
    else:
      print("invalid option")
else:
  print("invalid salary")

其中salary.isdigit()判断是否为数字形式,字符串中的数字也属于数字形式。
\033[31;1m和\033[0m括起来的部分是给文字加颜色,不同的颜色请参考:

https://blog.csdn.net/qq_37952052/article/details/124110713

字符串

重点说一下字符串
首字母大写:

name = 'messi'
print(name.capitalize())

相关文章

网友评论

      本文标题:Python基础2

      本文链接:https://www.haomeiwen.com/subject/uejyxdtx.html