- 一、什么是变量?
- 二、为什么要有变量?
- 三、如何用变量
- 原则:先定义,后引用
# name = ‘egon’ # 定义-》存
# print(name) # 引用-》取 - age = 18
# print(age) - 引用计数减少
del x # 解除变量名x与值10的绑定关系,10的引用计数变为2
# print(y)
del y # 10的引用计数变为1
# print(z)
z = 12345 # # 10的引用计数变为0
# print(z) - 原则:变量名的命名应该见名知意
# 4.1. 变量名只能是 字母、数字或下划线的任意组合
# 4.2. 变量名的第一个字符不能是数字
# 4.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’]
# age=18
# print=’egon’ - ps:不要用拼音,不要用中文,在见名知意的前提下尽可能短
# mingzi=’egon’
# 名字=’egon’
# print(名字) - 5.1 纯小写加下划线的方式(在python中,关于变量名的命名推荐使用这种方式)
age_of_alex = 73
# print(age_of_alex)
# 5.2 驼峰体
AgeOfAlex = 73
# print(AgeOfAlex) - name=’egon’
# id:反映的是变量值的内存地址,内存地址不同id则不同
# print(id(name))
# type:不同类型的值用来表示记录不同的状态
# print(type(name))
# value:值本身
# print(name) - 了解:小整数池[-5,256]
# 从python解释器启动那一刻开始,就会在内存中事先申请
# 好一系列内存空间存放好常用的整数 - 四、基本数据类型
- 作用:记录年龄、身份证号、个数等等
# 定义:
age = 18
# print(type(age)) - 数字类型的其他使用
# level = 1
# level=level + 1
# print(level)
# print(10 *3) - print(10 + 3.3) # int与float之间可以相加
# age = 19
# print(age > 18) - x=18
# print(type(x))
# x=’18’ # 由数字组成的字符串,是字符串类型,不是int类型
# print(type(x)) - ‘name’=’egon’ # 语法错误,等号左边是变量名,变量名的命名不能有引号
- xxx # 代表访问变量名字
‘xxx’ # 代表的是值 - x=10
# y=x - 其他使用:
# 字符串的嵌套,注意:外层用单引号,内存应该用双引号,反之亦然
# print(“my name is ‘egon’”)
# print(‘my name is \’egon\’’) - print(l[4])
# print(l[-1]) - hobbies=’read music play’
# print(hobbies)
# hobbies = [‘read’, ‘music’, ‘play’]
# print(hobbies[1]) - 其他的用途:
# students_info=[
# [‘tony’,18,[‘jack’,]],
# [‘jason’,18,[‘play’,’sleep’]]
# ]
# 取出第一个学生的第一个爱好
# print(students_info[0][2][0]) - info={
# “name”:’egon’,
# “age”:18,
# “gender”:’male’,
# “salary”:19
# }
# print(info[“salary”]) - 其他用途:
# students_info=[
# 第1个信息,
# 第2个信息,
# 第3个信息,
# ] - 5.1 作用
# 用来记录真假这两种状态
# 5.2 定义
# is_ok = True
# is_ok = False
# print(type(is_ok)) - x=1
# y=0 - students=[
# {‘name’:’egon’,’gender’:’male’},
# {‘name’:’alex’,’gender’:’female’},
# ] - students=[
# {‘name’:’egon’,’gender’:True},
# {‘name’:’alex’,’gender’:False},
# ] - x = 10 # 直接引用
# print(id(x))
# y = x
# z = x
#
# l = [‘a’, ‘b’, x] # 间接引用
# print(id(l[2])) #
#
# d = {‘mmm’: x} # 间接引用
#
# print(id(d[‘mmm’])) - x=10
# l=[‘a’,’b’,x] # l=[‘a’的内存地址,’b’的内存地址,10的内存地址]
#
# x=123
# print(l[2])
#
#
# x=10
# x=[10,]
# l=[‘a’,’b’,10] - print(id(l1[1]))
# print(id(l2)) - print(id(l2[1]))
# print(id(l1)) - print(l2)
# print(l1[1]) - 六、用户交互
- 在Python3:input会将用户输入的所有内容都存成字符串类型
# username = input(“请输入您的账号:”) # “egon”
# print(username, type(username)) - age = input(“请输入的你的年龄: “) # age=”18”
# print(age, type(age))
# age=int(age) # int只能将纯数字的字符串转成整型
# print(age > 16) - int(“12345”)
# int(“1234.5”)
# int(“1234abc5”) - 在python2中:
# raw_input():用法与python3的input一模一样
# input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型
# >>> age=input(“>>>>>>>>>>>>>>>>>>>>>: “)
# >>>>>>>>>>>>>>>>>>>>>: 18
# >>> age,type(age)
# (18,)
# >>>
# >>> x=input(“>>>>>>>>>>>>>>>>>>>>>: “)
# >>>>>>>>>>>>>>>>>>>>>: 1.3
# >>> x,type(x)
# (1.3,)
# >>>
# >>> x=input(“>>>>>>>>>>>>>>>>>>>>>: “)
# >>>>>>>>>>>>>>>>>>>>>: [1,2,3]
# >>> x,type(x)
# ([1, 2, 3],)
# >>> - 值按照位置与%s一一对应,少一个不行,多一个也不行
# res=”my name is %s my age is %s” %(‘egon’,”18”)
# res=”my name is %s my age is %s” %(“18”,’egon’)
# res=”my name is %s” %”egon”
# print(res) - %s可以接收任意类型
# print(‘my age is %s’ %18)
# print(‘my age is %s’ %[1,23])
# print(‘my age is %s’ %{‘a’:333})
# print(‘my age is %d’ %18) # %d只能接收int
# print(‘my age is %d’ %”18”) - 按照位置传值
# res=’我的名字是 {} 我的年龄是 {}’.format(‘egon’,18)
# print(res) - 打破位置的限制,按照key=value传值
# res=”我的名字是 {name} 我的年龄是 {age}”.format(age=18,name=’egon’)
# print(res) - 了解知识
“””
2.4 填充与格式化
# 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
# <10:左对齐,总共10个字符,不够的用号填充
print(‘{0:<10}’.format(‘开始执行’)) # 开始执行* - >10:右对齐,总共10个字符,不够的用号填充
print(‘{0:>10}’.format(‘开始执行’)) # *开始执行 - ^10:居中显示,总共10个字符,不够的用号填充
print(‘{0:^10}’.format(‘开始执行’)) # **开始执行*
2.5 精度与进制
一、什么是变量?
变量就是可以变化的量,量指的是事物的状态,比如人的年龄、性别,游戏角色的等级、金钱等等
二、为什么要有变量?
为了让计算机能够像人一样去记忆事物的某种状态,并且状态是可以发生变化的
详细地说:
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程
三、如何用变量
1、变量基本使用
原则:先定义,后引用
# name = ‘egon’ # 定义-》存
# print(name) # 引用-》取
age = 18
# print(age)
2、内存管理:垃圾回收机制
垃圾:当一个变量值被绑定的变量名的个数为0时,该变量值无法被访问到,称之为垃圾
引用计数增加
x = 10 # 10的引用计数为1
y = x # 10的引用计数为2
z = x # 10的引用计数为3
引用计数减少
del x # 解除变量名x与值10的绑定关系,10的引用计数变为2
# print(y)
del y # 10的引用计数变为1
# print(z)
z = 12345 # # 10的引用计数变为0
# print(z)
3、变量有三大组成部分
I:变量名=》是指向等号右侧值的内存地址的,用来访问等号右侧的值
II:赋值符号:将变量值的内存地址绑定给变量名
III:变量值:代表记录的事物的状态
4、变量名的命名的规则
原则:变量名的命名应该见名知意
# 4.1. 变量名只能是 字母、数字或下划线的任意组合
# 4.2. 变量名的第一个字符不能是数字
# 4.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’]
# age=18
# print=’egon’
ps:不要用拼音,不要用中文,在见名知意的前提下尽可能短
# mingzi=’egon’
# 名字=’egon’
# print(名字)
5、变量名的命名风格
5.1 纯小写加下划线的方式(在python中,关于变量名的命名推荐使用这种方式)
age_of_alex = 73
# print(age_of_alex)
# 5.2 驼峰体
AgeOfAlex = 73
# print(AgeOfAlex)
6、变量值三个重要的特征
name=’egon’
# id:反映的是变量值的内存地址,内存地址不同id则不同
# print(id(name))
# type:不同类型的值用来表示记录不同的状态
# print(type(name))
# value:值本身
# print(name)
6.2 is与==
is:比较左右两个值身份id是否相等
==:比较左右两个值他们的值是否相等
id不同的情况下,值有可能相同,即两块不同的内存空间里可以存相同的值
id相同的情况下,值一定相同,x is y成立,x == y也必然成立
>>> x=’info:Egon:18’
>>> y=’info:Egon:18’
>>> print(x,y)
info:Egon:18 info:Egon:18
>>> print(id(x),id(y))
4565819264 4566192176
>>>
>>> x == y
True
>>> x is y
False
‘
了解:小整数池[-5,256]
# 从python解释器启动那一刻开始,就会在内存中事先申请
# 好一系列内存空间存放好常用的整数
7、常量:不变的量
注意:python语法中没有常量的概念,但是在程序的开发过程中会涉及到常量的概念
AGE_OF_ALEX = 73 # 小写字母全为大写代表常量,这只是一种约定、规范
AGE_OF_ALEX = 74
print(AGE_OF_ALEX)
四、基本数据类型
1、数字类型
1.1 整型int
作用:记录年龄、身份证号、个数等等
# 定义:
age = 18
# print(type(age))
1.2 浮点型float
作用:记录薪资、身高、体重
定义
salary = 3.3
height = 1.87
weight = 70.3
# print(type(height))
数字类型的其他使用
# level = 1
# level=level + 1
# print(level)
# print(10 *3)
print(10 + 3.3) # int与float之间可以相加
# age = 19
# print(age > 18)
2、字符串类型str
作用:记录描述性质的状态,名字、一段话
定义:用引号(’’,””,’’’ ‘’’,””” “””,)包含的一串字符
info = ‘’’
天下只有两种人。比如一串葡萄到手,一种人挑最好的先吃,
另一种人把最好的留到最后吃。
照例第一种人应该乐观,因为他每吃一颗都是吃剩的葡萄里最好的;
第二种人应该悲观,因为他每吃一颗都是吃剩的葡萄里最坏的。
不过事实却适得其反,缘故是第二种人还有希望,第一种人只有回忆。
‘’’
# print(type(info))
# name=”egon”
# print(name)
x=18
# print(type(x))
# x=’18’ # 由数字组成的字符串,是字符串类型,不是int类型
# print(type(x))
‘name’=’egon’ # 语法错误,等号左边是变量名,变量名的命名不能有引号
xxx # 代表访问变量名字
‘xxx’ # 代表的是值
x=10
# y=x
其他使用:
# 字符串的嵌套,注意:外层用单引号,内存应该用双引号,反之亦然
# print(“my name is ‘egon’”)
# print(‘my name is \’egon\’’)
字符串之间可以相加,但仅限于str与str之间进行,
代表字符串的拼接,了解即可,不推荐使用,因为str之间的
相加效率极低
print(‘my name is ‘+’egon’)
print(‘=’20)
print(‘hello world’)
print(‘=’20)
3、列表
索引对应值,索引从0开始,0代表第一个
作用:按位置记录多个值(同一个人的多个爱好、同一个班级的所有学校姓名、同一个人12个月的薪资),并且可以按照索引取指定位置的值
定义:在[]内用逗号分隔开多个任意类型的值,一个值称之为一个元素
# 0 1 2 3 4
l = [10, 3.1, ‘aaa’, [‘bbb’, ‘ccc’], ‘ddd’]
# print(l)
# print(l[1])
# print(l[2])
# print(l[3][1])
print(l[4])
# print(l[-1])
hobbies=’read music play’
# print(hobbies)
# hobbies = [‘read’, ‘music’, ‘play’]
# print(hobbies[1])
其他的用途:
# students_info=[
# [‘tony’,18,[‘jack’,]],
# [‘jason’,18,[‘play’,’sleep’]]
# ]
# 取出第一个学生的第一个爱好
# print(students_info[0][2][0])
4、字典类型
key对应值,其中key通常为字符串类型,所以key对值可以有描述性的功能
# 作用:用来存多个值,每个值都有唯一一个key与其对应,key对值有描述性功能
# 定义:在{}内用逗号分开各多个key:value
# d={‘a’:1,’b’:2}
# print(type(d))
# print(d[‘a’])
info={
# “name”:’egon’,
# “age”:18,
# “gender”:’male’,
# “salary”:19
# }
# print(info[“salary”])
其他用途:
# students_info=[
# 第1个信息,
# 第2个信息,
# 第3个信息,
# ]
students_info=[
{“name”:’egon1’,’age1’:19,’gender’:’male’},
{“name”:’egon2’,’age1’:19,’gender’:’male’},
{“name”:’egon3’,’age1’:19,’gender’:’male’},
]
print(students_info[1][‘gender’])
5、布尔bool
5.1 作用
# 用来记录真假这两种状态
# 5.2 定义
# is_ok = True
# is_ok = False
# print(type(is_ok))
x=1
# y=0
students=[
# {‘name’:’egon’,’gender’:’male’},
# {‘name’:’alex’,’gender’:’female’},
# ]
students=[
# {‘name’:’egon’,’gender’:True},
# {‘name’:’alex’,’gender’:False},
# ]
students=[
{‘name’:’egon’,’gender’:1},
{‘name’:’alex’,’gender’:0},
]
五、垃圾回收机制(GC)
# 1、引用计数
x = 10 # 直接引用
# print(id(x))
# y = x
# z = x
#
# l = [‘a’, ‘b’, x] # 间接引用
# print(id(l[2])) #
#
# d = {‘mmm’: x} # 间接引用
#
# print(id(d[‘mmm’]))
x=10
# l=[‘a’,’b’,x] # l=[‘a’的内存地址,’b’的内存地址,10的内存地址]
#
# x=123
# print(l[2])
#
#
# x=10
# x=[10,]
# l=[‘a’,’b’,10]
# 2、标记清除
用来解决循环引用带来的内存泄露问题
# 循环引用=>导致内存泄露
l1=[111,]
l2=[222,]
l1.append(l2) # l1=[值111的内存地址,l2列表的内存地址]
l2.append(l1) # l2=[值222的内存地址,l1列表的内存地址]
print(id(l1[1]))
# print(id(l2))
print(id(l2[1]))
# print(id(l1))
print(l2)
# print(l1[1])
del l1
del l2
3、分代回收
六、用户交互
1、接收用户的输入
在Python3:input会将用户输入的所有内容都存成字符串类型
# username = input(“请输入您的账号:”) # “egon”
# print(username, type(username))
age = input(“请输入的你的年龄: “) # age=”18”
# print(age, type(age))
# age=int(age) # int只能将纯数字的字符串转成整型
# print(age > 16)
int(“12345”)
# int(“1234.5”)
# int(“1234abc5”)
在python2中:
# raw_input():用法与python3的input一模一样
# input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型
# >>> age=input(“>>>>>>>>>>>>>>>>>>>>>: “)
# >>>>>>>>>>>>>>>>>>>>>: 18
# >>> age,type(age)
# (18, )
# >>>
# >>> x=input(“>>>>>>>>>>>>>>>>>>>>>: “)
# >>>>>>>>>>>>>>>>>>>>>: 1.3
# >>> x,type(x)
# (1.3, )
# >>>
# >>> x=input(“>>>>>>>>>>>>>>>>>>>>>: “)
# >>>>>>>>>>>>>>>>>>>>>: [1,2,3]
# >>> x,type(x)
# ([1, 2, 3], )
# >>>
# >>>
# >>> x=input(“>>>>>>>>>>>>>>>>>>>>>: “)
# >>>>>>>>>>>>>>>>>>>>>: 1.3
# >>> x,type(x)
# (1.3,
# >>>
# >>> x=input(“>>>>>>>>>>>>>>>>>>>>>: “)
# >>>>>>>>>>>>>>>>>>>>>: [1,2,3]
# >>> x,type(x)
# ([1, 2, 3],
# >>>
2、字符串的格式化输出
2.1 %
值按照位置与%s一一对应,少一个不行,多一个也不行
# res=”my name is %s my age is %s” %(‘egon’,”18”)
# res=”my name is %s my age is %s” %(“18”,’egon’)
# res=”my name is %s” %”egon”
# print(res)
以字典的形式传值,打破位置的限制
# res=”我的名字是 %(name)s 我的年龄是 %(age)s” %{“age”:”18”,”name”:’egon’}
# print(res)
%s可以接收任意类型
# print(‘my age is %s’ %18)
# print(‘my age is %s’ %[1,23])
# print(‘my age is %s’ %{‘a’:333})
# print(‘my age is %d’ %18) # %d只能接收int
# print(‘my age is %d’ %”18”)
2.2 str.format:兼容性好
按照位置传值
# res=’我的名字是 {} 我的年龄是 {}’.format(‘egon’,18)
# print(res)
res=’我的名字是 {0}{0}{0} 我的年龄是 {1}{1}’.format(‘egon’,18)
print(res)
打破位置的限制,按照key=value传值
# res=”我的名字是 {name} 我的年龄是 {age}”.format(age=18,name=’egon’)
# print(res)
# 2.3 f:python3.5以后才推出
x = input(‘your name: ‘)
y = input(‘your age: ‘)
res = f’我的名字是{x} 我的年龄是{y}’
print(res)
了解知识
“””
2.4 填充与格式化
# 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
# <10:左对齐,总共10个字符,不够的用号填充
print(‘{0:<10}’.format(‘开始执行’)) # 开始执行*
>10:右对齐,总共10个字符,不够的用号填充
print(‘{0:>10}’.format(‘开始执行’)) # *开始执行
^10:居中显示,总共10个字符,不够的用号填充
print(‘{0:^10}’.format(‘开始执行’)) # **开始执行*
2.5 精度与进制
print(‘{salary:.3f}’.format(salary=1232132.12351)) #精确到小数点后3位,四舍五入,结果为:1232132.124
print(‘{0:b}’.format(123)) # 转成二进制,结果为:1111011
print(‘{0:o}’.format(9)) # 转成八进制,结果为:11
print(‘{0:x}’.format(15)) # 转成十六进制,结果为:f
print(‘{0:,}’.format(99812939393931)) # 千分位格式化,结果为:99,812,939,393,931
“””