码迷,mamicode.com
首页 > 编程语言 > 详细

Python入门

时间:2017-09-02 12:15:56      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:不可变   code   描述   imp   oba   and   一个人   .com   ber   

 

 

一 变量

什么是变量

#变量即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态。

 为什么要有变量

#程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。
#比如:
    英雄的等级为1,打怪升级(变)为10
    僵尸的存活状态True,被植物打死了,于是变为False
    人的名字为H,也可以修改为h

  如何定义变量

#变量名(相当于门牌号,指向值所在的空间),等号,变量值
name=H
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

 定义变量名不好的方式

#1. 变量名为中文、拼音
#2. 变量名过长
#3. 变量名词不达意

 定义变量会有:id,type,value

#1 等号比较的是value,
#2 is比较的是id

#强调:
#1. id相同,意味着type和value必定相同
#2. value相同type肯定相同,但id可能不同,如下
>>> x=Info Egon:18
>>> y=Info Egon:18
>>> id(x)
4376607152
>>> id(y)
4376607408
>>> 
>>> x == y
True
>>> x is y
False

 

PS:变量名与变量值仅仅只是一种绑定关系

定义一个变量,储存的数据是变量值
变量名与变量值只是一种绑定关系
变量名本身并没有储存值的功能

值的引用计数或者说值身上绑定的变量名为0个,python解释器就会定期回收他们
引用计数为零,会被python的垃圾回收机制自动回收

变量保存的实际都是对象的引用,所以在给一个不可变类型(比如 int)的变量 a 赋新值的时候,你实际上是在内存中新建了一个对象,并将 a 指向这个新的对象,然后将原对象的引用计数 –1.


#增加引用计数
x=1
y=x
z=y
#减少引用计数
x=2
del y
z=‘abc‘

 

常量

常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量
举例,假如老男孩老师的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量
AGE_OF_OLDBOY = 56,但本质仍然是变量,仅仅只是一种提示作用

#ps:在c语言中有专门的常量定义语法,const int count = 60;一旦定义为常量,更改即会报错 

 

1.现有如下两个变量,请简述 n1 和 n2 是什么关系?
n1=123
n2=123

答:id相同,类型相同,值相同,n1和n2使用同一内存地址
python内部的优化: -5到157之间的赋值变量都是相同的地址

2.现有如下两个变量,请简述 n1 和 n2 是什么关系?
n1=123456
n2=123456

答:id不同,类型相同,值相同,n1和n2使用不同的内存地址
python内部的优化: -5到157之间的赋值变量都是相同的地址

3.现有如下两个变量,请简述 n1 和 n2 是什么关系?
n1=123456
n2=n1

答:id不同,类型相同,值相同,
n1和n2使用同一内存地址,只是变量名不同

 

 

二 用户与程序交互

  

 以前,我们去银行取钱,需要有一个银行业务员等着我们把自己的账号密码输入给他,然后他去进行验证,成功后,我们再将取款金额输入/告诉他

    骄傲的现代人,会为客户提供一台ATM机(就是一台计算机),让ATM机跟用户交互,从而取代人力。然而机器是死的,我们必须为其编写程序来运行,这就要求我们的编程语言中能够有一种能与用户交互,接收用户输入数据的机制

#在python3中
input:用户输入任何值,都存成字符串类型

#在python2中
input:用户输入什么类型,就存成什么类型
raw_input:等于python3的input

 

 注释

    随着学习的深入,用不了多久,你就可以写复杂的上千甚至上万行的代码啦,有些代码你花了很久写出来,过了些天再回去看,发现竟然看不懂了,这太正常了。 另外,你以后在工作中会发现,一个项目多是由几个甚至几十个开发人员一起做,你要调用别人写的代码,别人也要用你的,如果代码不加注释,你自己都看不懂,更别说别人了,这产会挨打的。所以为了避免这种尴尬的事情发生,一定要增加你代码的可读性。

    代码注释分单行和多行注释:

单行注释用#,多行注释可以用三对(单)双引号""" """

    代码注释的原则:

#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)
用于标识:工资,身高,体重,
技术分享
#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 int>



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

 

 字符串

#在python中,加了引号的字符就是字符串类型,python并没有字符类型。
定义:name=hc #name=str(‘hc‘) 
用于标识:描述性的内容,如姓名,性别,国籍,种族
技术分享
#那单引号、双引号、多引号有什么区别呢? 让我大声告诉你,单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合
msg = "My name is Egon , I‘m 18 years old!"

#多引号什么作用呢?作用就是多行字符串必须用多引号
msg = ‘‘‘
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
‘‘‘
print(msg)
单引号,双引号,三引号的区别
技术分享
#数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。
>>> name=hc
>>> age=18
>>> name+age #相加其实就是简单拼接
hc18
>>> name*5 
hchchchchc


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

#注意2:只能字符串加字符串,不能字符串加其他类型
字符串拼接(只能在字符串之间进行,且只能相加或相乘)
技术分享
取值:
    首先要明确,字符串整体就是一个值,只不过特殊之处在于:
    python中没有字符类型,字符串是由一串字符组成,想取出字符串中
    的字符,也可以按照下标的方式取得
            
name:取得是字符串整体的那一个值
name[1]:取得是第二位置的字符

name=hc
print(name)   #hc
print(name[1]) #c
取值

 

列表

#在[]内用逗号分隔,可以存放n个任意类型的值
定义:students=[student1,student2,student3,] #students=list([‘student1‘,‘student2‘,‘student3‘,]) 
用于标识:存储多个值的情况,比如一个人有多个爱好
技术分享
#存放多个学生的信息:姓名,年龄,爱好
>>> students_info=[[student1,18,[play,sleep]],[student2,18,[play,sleep]]]
>>> students_info[0][2][0] #取出第一个学生的第一个爱好
play
列表嵌套、取值

 

字典

#为何还要用字典?
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下
>>> info=[student,male,18]
定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用
>>> info[2]
18
但这是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄
即:
        #name, sex, age
info=[student,male,18]
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们需要寻求一种,即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value,这就用到了字典
#在{}内用逗号分隔,可以存放多个key:value的值,value可以是任意类型
定义:info={name:student,age:18,sex:male} #info=dict({‘name‘:‘student‘,‘age‘:18,‘sex‘:male})
用于标识:存储多个值的情况,每个值都有唯一一个对应的key,可以更为方便高效地取值
技术分享
info={
    name:hc,
    hobbies:[play,sleep],
    company_info:{
        name:Home,
        type:education,
        emp_num:40,
    }
}
print(info[company_info][name]) #取公司名


students=[
    {name:student1,age:18,hobbies:[play,sleep]},
    {name:student2,age:19,hobbies:[read,sleep]},
    {name:student3,age:20,hobbies:[music,read,sleep]},
]
print(students[1][hobbies][1]) #取第二个学生的第二个爱好
字典相关的嵌套、取值

 

布尔

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

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

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

 

 四 可变类型与不可变类型

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

#2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间),如数字、字符串、元组

 

五 格式化输出

 %s    输出字符串

 %d   输出数字

 format   配合{}使用

技术分享
练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Student -----------
Name  : Hc
Age   : 22
Sex   : male
Job   : Student 
------------- end -----------------
小练习
技术分享
name=input(name:).strip()
age=input(age:).strip()
sex=input(sex:).strip()
job=input(job:).strip()
print(‘‘‘------------ info of %s -----------
Name  : %s
Age   : %s
Sex   : %s
Job   : %s
------------- end -----------------‘‘‘%(name,name,age,sex,job))
# print(‘‘‘------------ info of {} -----------
# Name  : {}
# Age   : {}
# Sex   : {}
# Job   : {}
# ------------- end -----------------‘‘‘.format(name,name,age,sex,job))
答案

 

 

六 基本运算符

  算数运算

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

技术分享

 

 比较运算

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

技术分享

   赋值运算

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

 技术分享

位运算

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:

下表中变量 a 为 60,b 为 13二进制格式如下:

a = 0011 1100

b = 0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011

技术分享

 

逻辑运算

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

技术分享

 

成员运算符

 技术分享

 

 身份运算符

身份运算符用于比较两个对象的存储单元

技术分享

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

 

 

 

 python运算符优先级

以下表格列出了从最高到最低优先级的所有运算符:

 技术分享

 

扩展阅读 http://www.cnblogs.com/huchong/p/7197373.html

Python入门

标签:不可变   code   描述   imp   oba   and   一个人   .com   ber   

原文地址:http://www.cnblogs.com/huchong/p/7466192.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!