python3 基础1
python属于运行与服务端的编程语言:
了解一门语言先了解其:
数据类型:
python中,数据类型可分为: Numbers(int float double) str bool dict tuple sets list sets是一种特殊的 元组tuple
对比javascript的数据类型;
Number string boolean Object Function Null undefined
很明显,python对 数分的更细;js中只有数,整数小数都是数; bool类型是一致的但取反却不一致 python 中 Not ; js中用 !;
dict与json对象(其实与map对应更合适:)对应: set对应es6中的set ;set其实用list生成的; a=([1,2,3,4]);
list与数组对应;
条件判断:
if xxx: elif:xxx else:xxx;
循环:
for in 和 wihle ; python中并没有单纯的for循环;
函数定义:
def my_abs(x): if x >= 0: return x else: return -x
来点小坑:
判断一个对象是否为字符串:
本来在js中就非常简单: typeof obj=="string";
而在py中:
St1=" ___000000000000 "; ssss=123; dc=str(type(St1)); print(dc[8:-2]); print(dc[8:-2]=="str"); print(print(type(St1)));
于是我很好奇:为什么还要转一下: type(str1)这个竟然不是字符串:
后来发现其实也是有自带函数的:
def str_(string): #第一步,判读是否是字符串 if isinstance(string, str): print("传入的是字符串"); return; else: print("对象不是一个字符串"); return; str_(St1);
初学难免有问题发现:
来个疑惑点:
a1=0; def cc(): print(a1); #没问题; if a1==0: print("a1等于0"); cc(); arr_list1=[1,2,3,4,56,9,2]; zhi=0;#位置; re=0;#结果; def add_arr(obj): global zhi; global re; if zhi==len(obj): return re; else: re+=obj[zhi]; zhi+=1; add_arr(obj); vv11=add_arr(arr_list1); #print("数组的和是:%d"%vv); print(vv11); #None print("数组求和的结果是:%d"%re);
cc函数证明了,python中确实存在作用域链:
那么第二个函数中,global就没有必要了,因为可以访问到外面的变量;但是去掉又会报错;记录在此,以后解决;
python 中数据类型释疑,
aa="11"; bb=aa; print(aa,bb); aa="20"; print(aa,bb); print("*"*50); list_a=[1,3,5]; list_b=list_a; print(list_a); print(list_b); list_a.append(100); print(list_b); #现在统一总结为:python3中,所有的赋值均为引用; #那么你一定疑问了,如果是按引用传递的,那么上述的两个结果怎么会完全不一样呢? #在这里,我们把python 的数据类型分为,可变类型,和不可变类型; #当变量 aa="20",之后,实际上这种操作是不是重新赋值,意思是,aa本来是 "11"; #而aa="20",后,相当于指向了另一个内存空间(因为字符串是不可变类型); #反观 list_a,重新改变本对象后(注意,不是整体的重新赋值),list_a也是受到影响; #为什么同样的操作对字符串和list不一样呢,还是那句话,list数据是可变的;
对比javascript,也可以一句话总结,
python中的不可变数据类型,相当于javascript的基本数据类型,可变数据类型(list tuple sets) 相当于javascript中的 (Array,function,object)