Python 学习笔记(自用)(有C++基础)(连载)
2017-08-27 10:05
435 查看
我是在廖雪峰的官方网站上学得,讲的不多不详细,细节请自行百度
1 优缺点
优点:代码量少,“优雅,明确,简单”缺点:速度慢,因为Python是解释型语言,相对C这种直接编译的语言就慢很多
用中文中的’成语‘等可以很好的类比
2 数据类型和输入输出
python中数据类型是动态的即不用像c一样指定 int a=13,而可以a=13 解释器会根据实际情况来解释变量类型print()是输入函数,py中用单引号代替了双引号,也就是字符和字符串看起来没有区别
print(' my name is %s and I\'m %d years old'%(名字,年龄),'nice to meet you\n')
printf("my name is %s and I\'m %d years old nice to meet you\n",名字,年龄)
以上是PY和C的同一个输出语句 对比一下
input()是输入函数,直接读字符串
a=input('输入一个整数')
上面一句话等价于C中的
char a[10];
printf("输入一个整数\n")
scanf("%s",a)
那么很明显 a是一个字符串
在py中如果你输入了 13
然后再写 print(2×a)
输出结果是1313
因为 a默认是字符串
要完成输出26 可以这样写
print(2*int(a))
Py中用数据类型函数对字符串进行转换
3 list和tuple
list 结合了数组和链表(有兴趣可以研究以下底层结果)L=['a','b','c']
L[0],L[1]....L[len(L)-1]
L[-1]=L[len(L)-1]
.
.
.
L.append('d')
L.insert(4,'e')
L.pop()
L.pop(0)
二维数组可以用元素是链表的链表
以此类推
tuple可以看成const的list
4 条件语句
if a>14:pass
elif a>12:
pass
else :
pass
5 循环语句
有for和whilefor i in range(100):
print(i+1)
n=1
while n<=100:
print(n)
n+=1
6 dict 和 set
dict叫做字典和stl中的map一样,键值要是不可变的7 定义函数
def my_abs(x):if x>=0:
return x
else:
return -x
没返回值自动返回None
8 函数参数
和c++一样,参数可以设置默认值同时还有可变参数(数组),关键字参数(map)
9 切片
操作对象是一段区间,参数是3个(left,right,dx)左端点,右端点,间隔
比如取100内的偶数
L=list(range(101))[0:100:2]
10 迭代
和c++一个意思,可以有多个迭代器
for k,v in dict1.items() :
print(k,'=',v)
11 列表生成式
即生成一个满足一定条件的列表[i*i for i in L if L[i]>=0]
i×i是函数
(双重)循环指定迭代内容和条件决定了列表内容
12 生成器
L = [x * x for x in range(10)]
这是列表生成式,但如果一个列表超级长,而用的时候只使用很少的一部分,这样就浪费了大量空间
g = (x * x for x in range(10))
这是构造一个生成器g,通过next(g)得到运行一次的结果并记录
>>> next(g) 0 >>> next(g) 1 >>> next(g) 4 >>> next(g) 9 >>> next(g) 16 >>> next(g) 25 >>> next(g) 36 >>> next(g) 49 >>> next(g) 64 >>> next(g) 81 >>> next(g) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
按照优雅的原则我们会用
for n in g:
print(n)
这样表示
那自己要如何写生成器呢
这里用到了yield 有点像return
这里挂上一个杨辉三角
def yanghui(n):
k=1
L=[1]
while k<=n:
yield L
L.insert(0,0) #首尾补0方便列表生成
L.append(0)
len1=len(L)
L=[a+b for a,b in zip(L[0:len1-1],L[1:len1])] #L[i][j]=L[i-1][j-1]+L[i-1][j]
k=k+1
for n in yanghui(10):
print (n)
相关文章推荐
- Symbian C++学习笔记连载一:Symbian基础知识
- 《面向对象基础:C++实现》学习笔记之八
- 《面向对象基础:C++实现》学习笔记之三
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(6)高效率的幂运算
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(4)二分搜索算法
- C++/GDI+ 学习笔记(三)——基础
- C++/GDI+ 学习笔记(三)——基础
- 《面向对象基础:C++实现》学习笔记之四
- Python核心编程(第二版)学习笔记02 【第3章 Python基础】
- 学习笔记-C++搞Mobile基础
- C++学习笔记4-----类的继承基础概念
- 《面向对象基础:C++实现》学习笔记之一
- C++基础教程 学习笔记(一) C++的数据类型和修饰符
- 做java程序员有一段时间了,但是感觉基础的东西了解的很少很少,我从现在开始从新开始。。。。。。。。。。。学习笔记(连载)给有需要的人
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(3) 最大子序列和问题
- C/C++基础学习笔记
- python基础学习笔记分享版(1)
- C++基础(学习笔记)
- 《面向对象基础:C++实现》学习笔记之七
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(5)欧几里得算法欧几里得算法求最大公约数