02_Python基础

一、pyc.文件

1. 解释型语言和编译型语言

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

2. Python到底是什么

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:

javac hello.java

java hello

只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言

3. 简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObjectpyc文件

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,

当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

小结:

1.执行Python代码时,如果导入了其他的.py文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。

2.当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复第1步的过程。

3.如果修改过导入的.py文件,程序运行时会对比py文件和.pyc文件的修改时间,如有变化,重新生成.pyc文件。

二、数据类型

1.数字

  • nt(整型)
  • long(长整型)
  • float(浮点型)
  • complex(复数)

PS:查看数据类型可用 type 命令

>>> Num = 2**32
>>> type(Num)
<type ‘long‘>
>>> Num = 2**8
>>> type(Num)
<type ‘int‘>
>>> Num = 3.1415
>>> type(Num)
<type ‘float‘>

2、布尔值

真或假 | 1 或 0

 1 1 或 0
 2
 3 >>> 0 == True
 4
 5 False
 6
 7 >>> 0 == False
 8
 9 True
10
11 >>> 1 == True
12
13 True
14
15 >>> 1 == False
16
17 False

3、字符串

"hello world"

字符串格式化输

>>> name = "alex"
>>> print "I am %s" % name
I am alex

PS:字符串是%s、整数%d、浮点数%f

字符串常用功能

  • 移除空白
  • 分割
  • 长度
  • 索引
  • 切片

万恶的字符串拼接:

python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

>>> name = ‘alex‘
>>> print ("my name is " + name + " and you ?")
my name is alex and you ?

PS:此法会在内存中重新开辟一块空间,建议少用

字符串操作

name = "alex li 123 [email protected]#"
print(name[2:4])                #打印字符
print("name",len(name))         #打印字符串长度
print(name.center(40,‘-‘))      #分割符
print(name.find(‘li‘))          #查找字符/字符串的位置
print(‘‘ in name)               #判断是否有空格
print(name.capitalize())        #首字母大写
print(name.isalnum())           #判断是否有特殊符号
print(name.endswith(‘#‘))       #判断是否以xxx结尾
print(name.startswith(‘al‘))    #判断是否以xxx开头
print(name.upper().lower())     #字母大小写转换
name.extend(name2)              #扩展进来一个新的列表
name.reverse(name)              #反转列表
name.sort(name)                 #排序

#name.format()#字符串格式化
msg2 = "haha{0},ddd{1}"
print(msg2.format(‘Alex‘,33))
msg = "hello ,{name},it‘s been a long {age}...."
msg3 = msg.format(name=‘MingHu‘,age=333)
print(msg3)

#字符串拆分为列表
names = "alex,jack,rain"
name2 = names.split(",")
print(name2)
#列表合并字符串
print("|".join(name2))
#去掉字符串前后的空格
username = input("user:")
if username.strip() == ‘alex‘:
    print("welcome")

执行结果:

>>> name = "alex li 123 [email protected]#"
>>> print(name[2:4])                #打印字符
ex
>>> print("name",len(name))         #打印字符串长度
name 16
>>> print(name.center(40,‘-‘))      #分割符
------------alex li 123 [email protected]#------------
>>> print(name.find(‘li‘))          #查找字符/字符串的位置
5
>>> print(‘‘ in name)               #判断是否有空格
True
>>> print(name.capitalize())        #首字母大写
Alex li 123 [email protected]#
>>> print(name.isalnum())           #判断是否有特殊符号
False
>>> print(name.endswith(‘#‘))       #判断是否以xxx结尾
True
>>> print(name.startswith(‘al‘))    #判断是否以xxx开头
True
>>> print(name.upper().lower())     #字母大小写转换
alex li 123 [email protected]#

>>> #name.format()#字符串格式化
... msg2 = "haha{0},ddd{1}"
>>> print(msg2.format(‘Alex‘,33))
hahaAlex,ddd33
>>> msg = "hello ,{name},it‘s been a long {age}...."
>>> msg3 = msg.format(name=‘MingHu‘,age=333)
>>> print(msg3)
hello ,MingHu,it‘s been a long 333....
>>>
>>>
>>> #字符串拆分为列表
... names = "alex,jack,rain"
>>> name2 = names.split(",")
>>> print(name2)
[‘alex‘, ‘jack‘, ‘rain‘]
>>> #列表合并字符串
... print("|".join(name2))
alex|jack|rain
>>> #去掉字符串前后的空格
>>> username = input("user:")
user:alex
>>> if username.strip() == ‘alex‘:print("welcome")
...
welcome
>>> username = input("user:")
user:long
>>> if username.strip() == ‘alex‘:print("welcome")
... 

4、列表

创建列表

#法1:>>> name_list = [‘alex‘, ‘seven‘, ‘eric‘]
>>> print(name_list)
[‘alex‘, ‘seven‘, ‘eric‘]#法2:
>>> name_list = list([‘alex‘, ‘seven‘, ‘eric‘])
>>> print(name_list)
[‘alex‘, ‘seven‘, ‘eric‘]

基本操作

  • 索引
  • 切片
  • 追加
  • 删除
  • 长度
  • 切片
  • 循环
  • 包含
>>> name = ["MingLong","MingHu","Jack",22,9]
>>> name[2]
‘Jack‘
>>> name[1]
‘MingHu‘
>>> name[-1]
9
>>> name[0:2]          #下标,取多值时顾首不顾尾
[‘MingLong‘, ‘MingHu‘]
>>> name[0:-1]
[‘MingLong‘, ‘MingHu‘, ‘Jack‘, 22]
>>> name[-3:]
[‘Jack‘, 22, 9]
>>> name[:3]
[‘MingLong‘, ‘MingHu‘, ‘Jack‘]#多次取值
>>> name[:3][1:2]
[‘MingHu‘]
>>> name[:3][1:2][0][1]
‘i‘
#修改数据
>>> name[1] = "WangMinghu"
>>> name
[‘MingLong‘, ‘WangMinghu‘, ‘Jack‘, 22, 9]
#插入数据,一次只能插入一个数据
>>> name.insert(2,‘MingGou‘)
>>> name
[‘MingLong‘, ‘WangMinghu‘, ‘MingGou‘, ‘Jack‘, 22, 9]
#追加数据
>>> name.append("alex")
>>> name
[‘MingLong‘, ‘WangMinghu‘, ‘MingGou‘, ‘Jack‘, 22, 9, ‘alex‘]
#删除数据
>>> name.remove("MingGou")
>>> name
[‘MingLong‘, ‘WangMinghu‘, ‘Jack‘, 22, 9, ‘alex‘]

#只读列表 元组

r = (1,2,3,4,5) 

r[1] = 3

练习题:

  1. 写一个列表,列表里包含本组所有成员
  2. 往中间插入两个临组成员的名字
  3. 取出第3-8的人的列表
  4. 删除第7个人
  5. 把刚才加入的那2个其它组的人一次性删除
  6. 把组长的名字加上备注
  7. 隔一个人打印一个人

 1 #1.创建列表
 2 name = ["Longlong","Chengcheng","Zhengzheng","Yanyan","Xixi","Xiongxiong","Xuxu","Junjun"]
 3 print(name)
 4
 5 #2.往中间插入两个临组成员的名字
 6 name.insert(4,"Kaikai")
 7 name.insert(4,"Nannan")
 8 print(name)
 9
10 #3.取出第3-8的人的列表
11 print(name[2:8])
12
13 #4.    删除第7个人
14 name3 = name[7]
15 print(name3)
16 name.remove("Xuxu")
17 print(name)
18
19 #5.    把刚才加入的那2个其它组的人一次性删除
20 for deletename in ("Kaikai","Nannan"):name.remove(deletename)
21 #del name[4:6]      #按顺序删除,可能误删   #del全局命令,可以删除任意内容
22 print(name)
23
24 #6.把组长的名字加上备注
25 print(name[2],‘组长‘)
26 name[2] = "Zhengzheng_ZuZhang"
27 print(name[2])
28 print(name)
29
30 #7.隔一个人打印一个人
31 print(name[0:-1:2])     #打印步长
32 print(name[0::2])
33 print(name[::2])

列表的常用操作

  • copy
  • reverse
  • sort
  • pop
  • extend
  • index
  • list[::2]
  • del

5、字典

字典书写格式
id_db = {
    371471199306143632:{
        ‘name‘:"Alex Li",
        ‘age‘: 22,
        ‘addr‘:"ShanDong"
    },
        220471199306143632:{
        ‘name‘:"ShanPao",
        ‘age‘:22,
        ‘addr‘:"DongBei"
    },
        221471199306143632:{‘name‘:"ShanPao",‘age‘:22,‘addr‘:"DongBei"},
}
字典常用操作
print(id_db)
print(id_db)#打印字典
print(id_db[220471199306143632])    #取值
id_db[220471199306143632][‘name‘] = "WanMinghu" #修改
id_db[220471199306143632][‘qq_of_wife‘] = 234235435 #增加
id_db[220471199306143632].pop("addr")   #删除pop
del id_db[220471199306143632][‘addr‘]   #删除del
v = id_db.get(2204711993061436323) #获取key值时,如没有,不报错,返回none
print(v)
v1 = id_db[220471199306143633] #取值key值时,如没有,报错
print(v1)

print(id_db.items()) #把字典转换成列表 #数据量大时,不要把字典的内容转成列表形式,生成时间会非常非常长
print(id_db.values()) #列出字典里的所有值
print(id_db.keys()) #打印字典keys
id_db.has_key(220471199306143632) #only 2.x
print(id_db.setdefault(220471199306143632,"hahah")) #取一个key,如果不存在,就设置添加一个
print(id_db.fromkeys([1,2,34,4,5,6],‘ddd‘)) #不要用
print(id_db.popitem())  #随机删除,不要用
print(id_db)

三、数据运算

算数运算:

比较运算:

赋值运算:

逻辑运算:

成员运算:

身份运算:

位运算:

运算符优先级:

四、表达式

1. for 循环

最简单的循环10次

for i in range(10):

    print("loop:", i )

输出:

loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
loop: 5
loop: 6
loop: 7
loop: 8
loop: 9

练习:

name = ["long","cheng","zheng",[4,6,8,978,"wfasdf","asdfasdf"],9,345,12,"yan","xi","xiong","Xu",3,4,21,234,345,456,9,"jun"]

1.找出有多少个9,把它改成9999
2.同时找出所有34,把它删除

法1:

if 9 in name:
    num_of_ele = name.count(9)
    print("%s 个9" % num_of_ele)
    posistion_of_ele = name.index(9)
    print(posistion_of_ele)

1答:

for i in range(name.count(9)):
    ele_index = name.index(9)
    name[ele_index] = 9999
print(name)

输出结果:

[‘long‘, ‘cheng‘, ‘zheng‘, [4, 6, 8, 978, 9, ‘wfasdf‘, ‘asdfasdf‘], 9999, 345, 12, ‘yan‘, ‘xi‘, ‘xiong‘, ‘Xu‘, 3, 4, 21, 234, 345, 456, 9999, ‘jun‘]

2答:

for i in range(name.count(9)):
    ele_index = name.index(9)
    name[ele_index] = 9999
print(name)

输出结果:

[‘long‘, ‘cheng‘, ‘zheng‘, [4, 6, 8, 978, 9, ‘wfasdf‘, ‘asdfasdf‘], 9, 12, ‘yan‘, ‘xi‘, ‘xiong‘, ‘Xu‘, 3, 4, 21, 234, 456, 9, ‘jun‘]

错误使用案例

#for k,v in id_db.items(): #效率低,因为要有一个dict to list的转换过程#    print(k,v)for key in id_db:    print(key,id_db[key ])

2.while循环

海枯石烂代码,死循环
count = 0
while True:
  print("你是风儿我是沙,缠缠绵绵到天涯...",count)
  count += 1

 死循环代码尽量少写,上面代码增加退出条件,运行100次退出

count = 0
while True:
count +=1
if count > 50 and count <60:
continue
print("你是风儿我是沙,缠缠绵绵到天涯...",count)
if count == 100:
print("不玩了",count)
break

练习:购物小程序

#0.用户启动时先输入工资。#1.用户启动程序后,打印商品列表。#2.允许用户选择购买商品。#3.允许用户不断的购买各种商品。#4.购买时检测余额是否足够,如果足够直接付款,否则打印余额不足#5.允许用户主动退出程序,退出时打印已购列表。
salary = input("Input your salary:")
if salary.isdigit():
    salary = int(salary)
else:
    exit("Invaild data type.")

welcome_msg = ‘Welcome to Ales Shopping mall‘.center(50,‘-‘)
print(welcome_msg)

product_list = [
    (‘Iphone‘,5888),
    (‘Mac Air‘,8000),
    (‘Mac Pro‘,9000),
    (‘XiaoMi 2‘,19.9),
    (‘Coffee‘,30),
    (‘Tesla‘,820000),
    (‘Bike‘,700),
    (‘Cloth‘,200),]

shop_car = []

exit_flag = False
while exit_flag is not True:
    #for product_item in product_list:
    #    p_name,p_price = product_item
    print("product list".center(50,"-"))
    for item in enumerate(product_list):    #enumerate 枚取函数
        index = item[0]
        p_name = item[1][0]
        p_price = item[1][1]
        print(index,‘.‘,p_name,p_price)

    user_choice = input("[q=quit,c=check]What do you want to buy?:")
    if user_choice.isdigit():   #肯定是选择商品
        user_choice = int(user_choice)
        if user_choice < len(product_list):
            p_item = product_list[user_choice]
            if p_item[1] <= salary:    #买的起
                shop_car.append(p_item) #放入购物车
                salary -= p_item[1] #减钱
                print("Added [%s] into shop car,you current balance is [%s]" % (p_item,salary))
            else:
                print("Your balance is [%s],cannot afford this."% salary)
    else:
        if user_choice == ‘q‘ or user_choice == ‘quit‘:
            print("purchased products as below".center(40,‘*‘))
            for item in shop_car:
                print(item)
            print("END".center(40,‘*‘))
            print("Your balance is [%s]" % salary)
            print("Bye")
            exit_flag = True
        else:
            user_choice == ‘c‘ or user_choice == ‘check‘
            print("purchased products as below".center(40,‘*‘))
            for item in shop_car:
                print(item)
            print("END".center(40,‘*‘))
            print("Your balance is \033[41;1m[%s]\033[0m" % salary)
时间: 2024-10-13 11:12:17

02_Python基础的相关文章

Python基础班每日整理(一)

01_Linux基础1.操作系统的作用?操作系统是配置在计算机硬件上的第一层软件,主要作用是管理好硬件设备.2.Linux中根目录和家目录分别用什么表示?/表示根目录.~表示家目录3.Linux中相对路径和绝对路径?以根目录(/)或者家目录(~)开始的路径称为绝对路径,反之称为相对路径4.常用终端命令的介绍.ls list 查看当前文件夹下的内容pwd print wrok directory 查看当前所在文件夹cd [目录名] change directory 切换文件夹touch [文件名]

Python基础班每日整理(二)

02_Python基础_day02 Python中注释的作用?单行和多行注释在程序中对某些代码进行标注说明,增强程序的可读性.单行注释:以#号开头,再加一个空格,后面跟上注释内容TODO注释:# TODO 注释内容 备忘功能,可以记录待开发的程序多行注释:一对连续的三个双引号"""注释内容""" 计算机的三大件CPU.内存.硬盘 程序执行原理?程序没运行之前保存在硬盘上,运行之后加载到内存,然后CPU执行内存中程序代码 变量的作用?如何定义变量?

Python基础班每日整理(四)

02_Python基础_day06 字符串的定义字符串就是一串字符,用一对儿单引号或者双引号括起来 字符串切片切片就是使用索引值,从一个大的字符串中切出小的字符串,适用于字符串.元组.列表.基本语法是 字符串[开始索引:结束索引:步长],默认步长为1,索引从0开始,如果倒序切片,索引从-1开始. Python内置的公共方法len.del.max.min.cmp 列表"+"和extend.append的区别两个列表相加得到了一个全新的列表extend(列表),是给原来的列表又扩展了一个新

Python基础班每日整理(三)

02_Python基础_day04 while循环的基本格式初始化计数器while 条件:满足条件要重复执行的代码--修改计数器 明白break和continue两个关键字的作用,两者的区别是什么?break和continue都是专门用在循环中关键字,break是退出当前循环,不再执行当前循环后续代码continue是退出本次循环,继续下一次循环break和continue都只针对当前循环有效 字符串中常见的转义字符有哪些?\t制表符,输出文本时保持垂直方向对齐\n换行符 \输出反斜杠\r回车

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

Java注解(1)-注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式.注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样.那么,注解到底可以做什么呢? 1.注解的作用. 提供用来完整地描述程序所需要的信息,如编译期校验程序信息. 生成描述符文件,或生成新类的定义. 减轻编写"样板"代码(配置文件)的负担,可以使用注解自动生成. 更加干净易读的代码. 编译期类型检查. 2.Java提供的注解 Java5内置了一些原生的注

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

NumPy基础:数组和失量计算

NumPy : Numerical Python,是高性能科学计算和数据分析的基础包. 部分功能: ndarray:一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组: 用于对整组数据进行快速运算的标准数学函数(无需编写循环): 用于读写磁盘数据的工具以及用于操作内存映射文件的工具: 线性代数.随机数生成以及傅里叶变换功能: 用于集成C.C++.Fortran等语言编写的代码工具: 大部分数据分析应用关注的功能: 用于