DAY1--python入门

Posted guoyunlong666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DAY1--python入门相关的知识,希望对你有一定的参考价值。

阅读目录

一、编程与编程语言

首先弄清楚三点:

编程的目的:

#编程的目的则是将人类的思想流程按照某种能够被计算机识别的表达方式传递给计算机,从而达到让计算机能够像人脑/电脑一样自动执行的效果。 

什么是编程语言?

#上面提及的能够被计算机所识别的表达方式即编程语言。

什么是编程?

#编程即程序员根据需求把自己的思想流程按照某种编程语言的语法风格编写下来,产出的结果就是包含一堆字符的文件。

#强调:程序在未运行前跟普通文件无异,只有程序在运行时,文件内所写的字符才有特定的语法意义   

二、编程语言的分类

编程语言发展经历:

#机器语言:计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件;

#汇编语言:简写的英文标识符取代二进制去编写程序,本质仍然是直接操作硬件;

#高级语言:用人类的字符去编写程序,屏蔽了硬件操作

高级语言需要翻译成计算机能识别的语言,按照翻译方式又分为:

#1. 编译型(需要编译器,相当于用谷歌翻译):如C,执行速度快,调试麻烦

#2. 解释型(需要解释器,相当于同声传译):如python,执行速度慢,调试方便

 

  学习难度从高到低

  执行效率从高到低

开发效率从低到高   

速度不是关键(瓶颈理论),开发效率高才是王道

三、python介绍

介绍

    python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,Guido开始写能够解释Python语言语法的解释器。Python这个名字,来自Guido所挚爱的电视剧Monty Python’s Flying Circus。他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。

    最新的TIOBE排行榜,Python赶超PHP占据第4, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。

Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。

Python 有哪些种类(解释器)?

我们现在知道了Python是一门解释型语言,代码想运行,必须通过解释器执行,Python的解释器本身也可以看作是个程序(翻译官司是哪国人不重要),这个程序是什么语言开发的呢? 答案是好几种语言? what? 因为Python有好几种解释器,分别基于不同语言开发,每个解释器特点不同,但都能正常运行我们的Python代码,下面分别来看下:

#CPython:CPython是使用最广且被的Python解释器。本教程以CPython为准。
当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

#IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

#PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

#Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

#IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
View Code

四、安装解释器

打开官网 https://www.python.org/下载中心

 

#测试安装是否成功
windows --> 运行 --> 输入cmd ,然后回车,弹出cmd程序,输入python,如果能进入交互环境 ,代表安装成功。
#多版本共存演示
注意:在安装目录下找到python.exe,拷贝一份,命名为python2.exe或python3.exe,一定要保留原版,因为pip工具会调用它。

 五、写程序两种方式

#进入解释器的交互式模式:调试方便,无法永久保存代码

#脚本文件的方式:永久保存代码

强调:python解释器执行程序是解释执行,即打开文件读内容,因此文件的后缀名没有硬性限制,但通常定义为.py结尾

六、变量

变量赋值:

#变量名,等号,变量值(等号两边有没有空格都可以)
name=\'Egon\'   #字符串要用引号
sex=\'male\'
age=18
level=10

 变量名定义规范:

#1. 变量名只能是 字母、数字或下划线的任意组合
#2. 变量名的第一个字符不能是数字
#3. 关键字不能声明为变量名[\'and\', \'as\', \'assert\', \'break\', \'class\', \'continue\', \'def\', \'del\', \'elif\', \'else\', \'except\', \'exec\', \'finally\', \'for\', \'from\', \'global\', \'if\', \'import\', \'in\', \'is\', \'lambda\', \'not\', \'or\', \'pass\', \'print\', \'raise\', \'return\', \'try\', \'while\', \'with\', \'yield\']

变量定义方式:

#驼峰体
AgeOfOldboy = 56 
NumberOfStudents = 80
#下划线(推荐使用)
age_of_oldboy = 56 
number_of_students = 80 

 变量三要素:

name=\'guoyunlong\'
#1、变量值value(用来表示状态)
print(name)
guoyunlong
#2、变量值类型type(str/int/float/list...)
print(type(guoyunlong))
<class \'str\'>
#3、变量值的id号(变量内存空间的id号)
name=\'guoyunlong\'
31460016

 变量的修改与内存管理(引用计数与垃圾回收机制)

内存管理:

#1. id相同,意味着type和value必定相同 
#2. value相同type肯定相同,但id可能不同

#
本应该每定义一个变量都会开辟一个内存空间,即使值和类型是一样的 x=\'Info Egon:18\' y=\'Info Egon:18\' print(id(x),id(y)) 4376607152 4376607408 #python经过优化之后,在一定范围内的数字和字符串,值相同只开辟一块内存空间 x=\'guoyunlong\' y=\'guoyunlong\' print(id(x),id(y)) 37671152 37671152

强调:

#1 等号比较的是value,
#2 is比较的是id
>>> x == y
True
>>> x is y
False

 变量的修改:

#x和y都指向一个内存空间,x修改之后,并不影响y
x=\'a\'
y=x
print(id(x),id(y))
x=\'b\'
print(id(x),id(y))

31190800 31190800
31189400 31190800

 引用计数和垃圾回收机制(了解)

一个内存空间,如果有一个变量指向了它,引用计数就加1,如果变量值修改了,引用计数变为0,python就会定期清理这些内存空间

常量

常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量(用大写表示)
AGE_OF_OLDBOY = 56

 七、代码执行过程

python3 C:\\test.py
    
#1、先启动python3.exe
#2、把C:\\test.py从硬盘读入内存
#3、解释执行文件内容(识别python语法

 八、用户与程序交互

#在python3中
input:用户输入任何值,都存成字符串类型
name=input("请输入姓名:") #在python2中 input:用户输入什么类型,就存成什么类型 raw_input:等于python3的input
name=raw_input("请输入姓名:")

输入密码不可见功能:

#引用python模块
import getpass
passwd = getpass.getpass("请输入密码:")
print(passwd)

注释

代码注释分单行和多行注释, 单行注释用#,多行注释可以用三对双引号""" """或单引号\'\'\' \'\'\'

#单行注释
\'\'\'
多行
注释
\'\'\'
guo=\'\'\'
也可以
用来
赋值多行内容
\'\'\'
print(guo)

代码注释的原则:

#1. 不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可
#2. 注释可以用中文或英文,但不要用拼音

 文件头

指明使用什么解释器和编码格式,必写:

#!/usr/bin/env python
# -*- coding: utf-8 -*- 

九、基本数据类型

  什么是数据?为何要有多种类型的数据?

#数据即变量的值,如age=18,18则是我们保存的数据。
#变量的是用来反映/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识

数字:

#int整型
定义:age=10 #age=int(10)
用于标识:年龄,等级,身份证号,qq号,个数

#float浮点型
定义:salary=3.1 #salary=float(3.1)
用于标识:工资,身高,体重

a=1
b=2
sum=a.__add__(b) #等同于sum=a+b

print(a.bit_length()) #获取a的二进制最短位数
#int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
#long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在Python3里不再有long类型了,全都是int
>>> a= 2**64
>>> type(a)  #type()是查看数据类型的方法
<type \'long\'>
>>> b = 2**60
>>> type(b)
<type \'int\'>

#complex复数型
>>> x=1-2j
>>> x.imag
-2.0
>>> x.real
1.0
其他数字类型(了解)

 字符串:

#在python中,加了引号的字符就是字符串类型,python并没有字符类型。
定义:name=\'guoyunlong\' #name=str(\'guoyunlong\') 
用于标识:描述性的内容,如姓名,性别,国籍,种族
#不加参数,定义空字符串
name=\'\'
#在python中单引号、双引号、多引号没有区别,只有下面这种情况 你需要考虑单双的配合
msg = "My name is gyl , I\'m 18 years old!"

#多引号什么作用呢?作用就是多行字符串必须用多引号
msg = \'\'\'
今天天气不错,
挺风和日丽的,
我们下午没有课,
这的确挺爽的。
\'\'\'
print(msg)
单双引号区别
#字符串只能进行"相加"和"相乘"运算。
>>> name=\'gyl\'
>>> age=\'18\'
>>> name+age #相加其实就是简单拼接
\'gyl18\'
>>> name*5 
\'gylgylgylgylgyl\' 


#注意1:字符串相加的效率不高
字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次,

#注意2:只能字符串加字符串,不能字符串加其他类型
字符串拼接

  列表

#在[]内用逗号分隔,可以存放n个任意类型的值
1、定义:students=[\'egon\',\'alex\',\'wupeiqi\',] #students=list([\'egon\',\'alex\',\'wupeiqi\',]) 
用于标识:存储多个值的情况,比如一个人有多个爱好
2、定义空列表:students=[] #students=list()
3、转换:可以把可迭代的字符串、元祖和字典等可迭代的数据转化成列表。(将源数据进行for循环得到的每个值作为列表的元素)
>>> name=\'郭云龙\' >>> list(name) [\'郭\', \'云\', \'龙\']
>>> info={\'郭云龙\':27,\'alex\':50} >>> list(info) [\'郭云龙\', \'alex\']
#存放多个学生的信息:姓名,年龄,爱好
>>> students_info=[[\'egon\',18,[\'play\',]],[\'alex\',18,[\'play\',\'sleep\']]]
>>> students_info[0][2][0] #取出第一个学生的第一个爱好
\'play\'
列表嵌套、取值

字典: 

#为何还要用字典?
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下
>>> info=[\'egon\',\'male\',18]
定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用
>>> info[2]
18
但这是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄
即:
        #name, sex, age
info=[\'egon\',\'male\',18]
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们需要寻求一种,即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value,这就用到了字典
为什么使用字典
#在{}内用逗号分隔,可以存放多个key:value的值,value可以是任意类型,但是key必须是不可变类型。
定义:info={\'name\':\'egon\',\'age\':18,\'sex\':18} #info=dict({\'name\':\'egon\',\'age\':18,\'sex\':18}) #info=dict(name=\'egon\',age=18,sex=18)
用于标识:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效地取值
定义空字典:info={} #info=dict()
转换:迭代的每个结果需要是键值对,如果不是会报错,可用enumerate生成键值对。
>>> name=\'gyl\' >>> dict(enumerate(name,1)) {1: \'g\', 2: \'y\', 3: \'l\'} >>> li=[\'gyl\',\'alex\',\'wu\'] >>> dict(enumerate(li)) {0: \'gyl\', 1: \'alex\', 2: \'wu\'}
info={
    \'name\':\'egon\',
    \'hobbies\':[\'play\',\'sleep\'],
    \'company_info\':{
        \'name\':\'Oldboy\',
        \'type\':\'education\',
        \'emp_num\':40,
    }
}
print(info[\'company_info\'][\'name\']) #取公司名


students=[
    {\'name\':\'alex\',\'age\':38,\'hobbies\':[\'play\',\'sleep\']},
    {\'name\':\'egon\',\'age\':18,\'hobbies\':[\'read\',\'sleep\']},
    {\'name\':\'wupeiqi\',\'age\':58,\'hobbies\':[\'music\',\'read\',\'sleep\']},
]
print(students[1][\'hobbies\'][1]) #取第二个学生的第二个爱好
嵌套、取值

布尔值:

#布尔值,一个True一个False(1或0)
#计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识
>>> a=3
>>> b=5
>>> 
>>> a > b #不成立就是False(0),即假
False
>>> 
>>> a < b #成立就是True(1), 即真
True

接下来就可以根据条件结果来干不同的事情了:
if a > b 
   print(a is bigger than b )

else 
   print(a is smaller than b )
上面是伪代码,但意味着, 计算机已经可以像人脑一样根据判断结果不同,来执行不同的动作。 

布尔类型的重点知识!!!:

#所有数据类型都自带布尔值
1、None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
2、其余均为真 

 

可变类型与不可变类型:

#1.可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典

#2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)     #int,float,str

如列表改变值的范例:

will = ["Will", 28, ["Python", "C#", "JavaScript"]]
print(id(will))
print(will)
print([id(ele) for ele in will])

will[0] = "Wilber"
will[2].append("CSS")
print(id(will))
print(will)
print([id(ele) for ele in will])

#结果
39737304
[\'Will\', 28, [\'Python\', \'C#\', \'JavaScript\']]
[39413120, 36218340, 39766256]
39737304
[\'Wilber\', 28, [\'Python\', \'C#\', \'JavaScript\', \'CSS\']]
[39758496, 36218340, 39766256]

 可以看到图中,str是不可变类型,所以当修改will[0]的时候会替换旧的对象,产生一个新的地址39758496,will[2]新增元素,will[2]和will的id都没有变化,都是指向原来的内存空间。

 

十、格式化输出

#%s字符串占位符:可以接收字符串,也可接收数字
print(\'My name is %s,my age is %s\' %(\'egon\',18))
#%d数字占位符:只能接收数字
print(\'My name is %s,my age is %d\' %(\'egon\',18))
print(\'My name is %s,my age is %d\' %(\'egon\',\'18\')) #报错
#%f浮点数占位符
#接收用户输入,打印成指定格式 name=input(\'your name: \') age=input(\'your age: \') #用户输入18,会存成字符串18,无法传给%d print(\'My name is %s,my age is %s\' %(name,age)) #注意: #print(\'My name is %s,my age is %d\' %(name,age)) #age为字符串类型,无法传给%d,所以会报错

 

name = input("name")
age = input("age")
job = input("job")
info = \'\'\'
------------name of {_name}-----------
name:{_name}
age:{_age}
job:{_job}
--------------------------------------------------
\'\'\'.format(_name = name,
_age = age,
_job = job)

#或者:
info=\'\'\'
------------name of {0}-----------
name:{0}
age:{1}
job:{2}
--------------------------------------------------
\'\'\'.format(name,age,job)
#0代表format中第一个变量,顺序一定不能错了。
使用.format格式化输出

 

name=input(\'name>>: \')
age=input(\'age>>: \')
sex=input(\'sex>>: \')
job=input(\'job>>: \')

msg=\'\'\'
------------ info of %s -----------
Name  : %s
Age   : %s
Sex   : %s
Job   : %s
------------- end -----------------
\'\'\' %(name,name,age,sex,job)

print(msg)
示例

 

十一、基本运算符

计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算

    算数运算

    以下假设变量:a=10,b=20

 

    比较运算

    以下假设变量:a=10,b=20

 

 

    赋值运算

    以下假设变量:a=10,b=20

 

    逻辑运算

#从左向右,只要遇到true就停止匹配,所以混合一定要加()
>>> True or Flase and False
True
>>> (True or Flase) and False
False

 

三元运算:

name = 值1 if 条件 else  值2
#条件成立,把值1赋给name,条件不成立,把值2赋给name。
scor=60
name=\'gyl\' if scor < 50 else \'alex\'
print(name)
alex

 

身份运算

#is比较的是id
#而==比较的是值

十二、流程控制之if...else

格式:

#条件后面注意冒号,同一级别缩进要严格统一,默认4个空格
if 条件1:

    缩进的代码块

  elif 条件2:

    缩进的代码块

  elif 条件3:

    缩进的代码块

  ......

  else:  

    缩进的代码块
#如果:女人的年龄>30岁,那么:叫阿姨
age_of_girl=31
if age_of_girl > 30:
    print(\'阿姨好\')
示例1
#如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小姐
age_of_girl=18
if age_of_girl > 30:
    print(\'阿姨好\')
else:
    print(\'小姐好\')
示例2
#如果:女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨
age_of_girl=18
height=171
weight=99
is_pretty=True
if age_of_girl >= 18 and age_of_girl < 22 and height > 170 and weight < 100 and is_pretty == True:
    print(\'表白...\')else:
    print(\'阿姨好\')
示例3