Python学习笔记(二)
1.变量定义赋值
age =3; #//变量赋值(实现,获得空间)
#//1age =5; (报错 命名:数字不能在前)
name = 'ivan'; #//变量赋值字符串类型
girl = {'name':'lili','age':30}; #//变量赋值字典类型
a,b=1,2; #//多重赋值, 拆解为 a=1; b=2;
a = b = 1; #//连续赋值, 拆解为 a=1; b=1;
2.基础数据类型
基础数据类型分为三种,分别是数字(整形 浮点型 复数)、字符串和布尔值(逻辑判断)。
数字
a,b,c = 10,3.14,1+2j
print(a,b,c)
print(a+c)
print(c,type(c))
字符串
str = 'hello baby';
print(str,str[1],str[2:4],str[6:]);
name="good"
print(str+name);
布尔值
ret = 2>1;
print(ret);
ret =False;
if(ret):
print('this is true');
else:
print('this is false');
3.复合数据类型
复合数据类型分为四种,分别是列表、元祖、集合和字典。其中比较常用的是列表和字典。
列表(升级版的数组)
train = [50,20,'apple'];
print(train);
list = train;
train[2] = 'tv';
print(train);
print(list);
元组(只读的列表)
tuples = (1,6,'ivan',3,'good',77);
print(tuples); #//输出 (1,6,'ivan',3,'good',77)
print(tuples[1]); #//输出 6
print(tuples[1:3]); #//输出 (6, 'ivan')
tuples[1]=2; #//报错,元祖是禁止修改的
tu2 =(56,'yzg',3)
print(tuples+tu2) #//拼接
print(tuples[2.0]) #//报错:TypeError: tuple indices must be integers or slices, not float
#原因时类型不匹配,需把2.0 转为int 用 int(2.0)
集合(无序且不重复)
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket);
print('banana' in basket);
字典(键值对,类似JSON对象)
man={'name':'ivan','age':30};
print(man);
obj={}; #//定义空的字典对象
obj['name']='yzg';
obj['age']=28;
print(obj['name'],type(obj));
man = obj;
obj['age'] =10;
print(man);
4.空间分配
核心一句话:变量里存放的是对象的引用地址
str1 = "ivan";
str2 = str1; #//赋值是 引用的拷贝(引用是指向实体的地址)
print(id(str1)) #//id() 是查看对象的存储地址
print(id(str2))
print('str1 = ' + str1);
print('str2 = ' + str2);
str1 = "yzg";
print(id(str1))
print(id(str2))
运行结果
140509725583344
140509725583344
str1 = ivan
str2 = ivan
140509725583600
140509725583344
测试:下面程序输出为多少?
o1={};
o2=o1; #//变量里存放的是地址,变量赋值时只是传递了地址。实体只有一个
o2['name']="CSSer";
print(o1['name']);
答案是Csser,因为o1和o2里存放的是相同的地址,地址指向同一对象实体。o2把对象的值改变了,o1读出的对象的值相应也改变了。
5.嵌套引用
通过嵌套引用,可以扩展表示复杂数据结构。
train = [50,20,'apple'];
train[1] ={'name':'lili','age':30}
print(train)
#//可把函数名,看成指向代码块的引用
def gogo():
print("i can gogogo")
train[1]['teach']=gogo
print(train)
train[1]['teach']()
输出结果
[50, {'name': 'lili', 'age': 30}, 'apple']
[50, {'name': 'lili', 'age': 30, 'teach': <function gogo at 0x7f76d22efdc0>}, 'apple']
i can gogogo
6.数据运算
算数: + - * / %取模(求余) **幂 //取整除
print(6+3*5/2);
#//---浮点型精度问题(因二进制,0.333表示有问题)运算中有0.3出现都会有问题
print(0.3-0.2); #输出0.099
print(0.1+0.2==0.3); #输出 false
#//解决方法:放大后再缩小
print((10*0.1+10*0.2)/10==0.3); #输出 true
#//---% 取模(求余)
print(3%2); #单双数判断
#//---优先运算加 ()
print((10+20)/2);
print(2**3); #//2的3次方(幂)
print(9//2); #//取整除 为4
赋值运算:= += -= *= /= %= **= //=
a=2;
a+=3 #//与 a = a+3; 相同
print(a);
a%=2; #//与 a = a%2; 相同
print(a);
a**=3
print(a);
a = 9;
a//=4
print(a);
比较:< > <= >= == !=
age =18;
if(age>=18):
print('成年');
today ='11.10';
if(today!='11.11'):
print('双11还未到');
a=2;
b='2';
if(a==b):
print('值相等');
位运算:&与 |或 ~非 ^异或 <<左移 >>右移
a=60 #//对应二进制00111100
b=13 #//对应二进制00001101
print(a&b) # 00001100
print(a|b) # 00111101
print(a^b) # 00110001
print(~a) # 11000011
c=4 # 00000100
print(c<<1) # 00001000
print(c>>1) # 00000010
逻辑运算:and与 or或 not非 in not in is is not
age =25;
print('是青年吗 ',(age>18 and age<30));
hasHouse,money =True,1000;
#hasHouse,money =False,1000;
if(hasHouse or money>1000000):
print("有房或有100万,嫁给他")
if not(hasHouse or money>1000000):
print("即没房也没100万,不嫁")
list = [1,2,3,4,8];
print('3在list中吗',3 in list);
print('6不在list中吗',6 not in list);
lili = {'name':'lili','age':30};
x = lili;
x['name']='linda';
print(x,'是lili这个人吗',x is lili);
7.类型转换
#//int() 转换为整型数字
print(int(3.14)+2);
print(int('12')+5);
print(int(0xa)+3);
#//转float
print(float(3)+1.24);
#//str() 转换为字符串
print(str('12')+'5');
lili = {'name':'lili','age':30};
print(str(lili)+'good');
print(lili+'good'); #fail
#//隐式转换(自动转换)
name = 'ivan'; print(name[1]); #//字符串转换为列表 --> 查找某位置的字符
print( '7'+'people'); #//数字转换为字符串 --> 进行拼接
print( '7'-'people'); #//报错:隐式转换失败