1.数据类型

字符串: ''或""表示单行,写三对符合表示多行, r'这种写法转义符不生效'

布尔值:True, False

空值: None

类型转换

print bool('True'), bool(), bool(), bool(''), bool(None)#True True False False False
print int('')+, str()+''#

内存模型

a = 'abc'       #内存创建变量a, 字符串'abc'
b = a #创建变量b, b指向a地址,也就是'abc'
a = 'xyz' #创建字符串'xyz',a指向‘xyz’
print b #b指针没变,所以还是‘abc’ a = {} #创建变量a,创建对象{},a指向{}
b = a #创建变量b, b指向a地址,也就是{}
a['a1'] = #修改a指向内容的数据
print b==a,b #b指针没变,所以内容跟a看到的一样
a = {} #重新创建对象{},a指向它,跟前一个不一样
a['a2'] = #修改新对象属性
print b==a,a,b #b还为原先的值,{'a1':},所以深拷贝可由此实现

参考:数据类型和变量

2.浅拷贝与深拷贝

可变对象:有多个属性的对象,如{},[],()

不可变对象:只有一个数据的对象,如‘abc’,1,True,None

# coding=utf-
#浅拷贝
a = [,,,,]
b = a
a.append('hello')
print a == b, a, b #深拷贝
from copy import copy
c = copy(a)
a.append('world')
print a == c, a, c #输出结果
True [, , , , , 'hello'] [, , , , , 'hello']
False [, , , , , 'hello', 'world'] [, , , , , 'hello']

=为浅拷贝,a跟b指向同一对象

copy.copy()为深拷贝,a跟b指向不同对象

参考:python的复制,深拷贝和浅拷贝的区别

3.函数

函数内存模型

# coding=utf-
a = abs #变量abs指向绝对值函数,a指向abs指向的地址
print a(-)
abs = #变量abs指向整数对象3
print a(-)
print abs(-) #再调就会报错,因为他已经不是绝对值函数了

函数返回多个值

实际上返回的是元组,python可以x,y=(1,2)这样赋值而已

def test1():
return ,
def test2():
return (,)
def test3():
return [,]
a, b = test1()
print a, b, type(test1())
a, b = test2()
print a, b, type(test2())
a, b = test3()
print a, b, type(test3()) #输出
<type 'tuple'>
<type 'tuple'>
<type 'list'>

默认参数

函数执行时,会先赋值必要参数,找不到就会抛异常结束,所以,默认参数必须写必要参数后面

默认参数为=号赋值,所以,会出现浅拷贝现象

def m_power(x, n=):
s =
while(n>):
s*=x
n-=
return s
print m_power()
print m_power(,)
print m_power(,n=) #输出

可变参数

接收(),[]

#可变参数函数手动实现
def test(nums):
sum =
for n in nums:
sum += n
return sum
print test([,,,,]) #可变参数
def test(*nums):#为什么此处重名没报错???
sum =
for n in nums:
sum += n
return sum
print test(,,,,)
nums = [,,,,]
print test(*nums) #输出

关键字参数

可传入任意参数,接收{}

#关键字参数手动实现
from copy import copy
def test2(props):
temp = copy(props)
temp['test_2'] =
return temp
kw = {'a':,'b':}
print test2(kw) #关键字参数
def test3(**props):
props['test_3'] =
return props
print test3(**kw)
print test3(a=,b=) #输出
{'a': , 'b': , 'test_2': }
{'a': , 'b': , 'test_3': }
{'a': , 'b': , 'test_3': }

命名关键字参数

python2不支持,略

4.函数递归

递归每种条件都有返回,并且在一定条件下能结束递归。

递归本身是堆栈调用,无法跳出递归或者堆栈过深会导致超过最大栈长度报错

尾递归调用:return a+add(a-1)为非尾递归,尾递归调用就会返回,只占用一个堆栈

尾递归详细见递归函数,有点没看懂

def add(a):
if a>:
return a+add(a-)
return
print add() #输出
55

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

循环

python:永远别写for循环???

demo1 for生成列表:

lista = [i for i in range()]
print lista
lista = [i for i in range(,,)]
print lista #输出结果
[, , , , , , , , , ]
[, , , , ]

demo2 遍历迭代器:

lista = [obj for obj in range(,,)]
for idx, obj in enumerate(lista):
print idx, obj
#输出

demo3 取得元素下标:

lista = [obj for obj in range(,,)]
for idx, obj in enumerate(lista):
if obj%==:
break
if obj%==:
continue
print idx, obj #输出

参考:函数的参数

python要点的更多相关文章

  1. python要点之III

    [python要点之III] 1.实现交换. 在C/C++中,交换两个变量,需要2个变量,tmp=x;x=y;y=tmp;. 在python中,交换两个变量可以这么写:x,y=y,x. 2.is&am ...

  2. python要点简要-一日精通python

    Python2.x是历史,Python3.x是这门语言的现在和未来.Python2和3大约90%的地方都很相似的. 1.注释 单行注释:在注释的前面输入#号,如下: # 这是一条注释 多行注释:使用三 ...

  3. Python要点总结,我使用了100个小例子!

  4. python要点记录

    1.字典:当存储的key数目在几万到几十万之间效率最高.

  5. 给Lisp程序员的Python简介

    给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Pyth ...

  6. Python - References

    01 - Python文档 Python:https://www.python.org/ Documentation:https://docs.python.org/ Standard Library ...

  7. Python3学习策略

    自学Python要点 [来自:http://www.cnblogs.com/shsxt/p/9138950.html] 1.找一本浅显易懂,例程比较好的教程,从头到尾看下去. 不要看很多本,专注于一本 ...

  8. python学习第一课要点记录

    写在要点之前的一段话,留给将来的自己:第一次参加编程的培训班,很兴奋很激动,之前都是自己在网上找免费的视频来看,然后跟着写一些课程中的代码,都是照着模子写,没有自己过多的思考.感觉这样学不好,除了多写 ...

  9. 第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

    第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点 1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题

随机推荐

  1. 数论细节梳理&模板

    初阶 扩展欧拉 \(k\ge\varphi(m)\)时,\(b^k\equiv b^{k\%\varphi(m)+\varphi(m)}(\bmod m\)) 扩展CRT 推式子合并同余方程. htt ...

  2. 最小表示法模板(洛谷P1368 工艺)(最小表示法)

    洛谷题目传送门 最小表示是指一个字符串通过循环位移变换(第一个移到最后一个)所能得到的字典序最小的字符串. 因为是环状的,所以肯定要先转化为序列,把原串倍长. 设决策点为一个表示法的开头.比较两个决策 ...

  3. 【BZOJ5289】[HNOI2018]排列(贪心)

    [BZOJ5289][HNOI2018]排列(贪心) 题面 BZOJ 洛谷 题解 这个限制看起来不知道在干什么,其实就是找到所有排列\(p\)中,\(p_k=x\),那么\(k<j\),其中\( ...

  4. MongoDB 数据库创建删除、表创建删除、数据增删改查

    一.管理 mongodb 数据库:mongo 查看所有数据库列 表 show dbs 二. 创建数据库 创建 数据库 use student 如果真的想把这个数据库创建成功,(collections) ...

  5. luogu4602 混合果汁 (主席树)

    按照美味值从大到小排序,对于每个询问,我想二分找到一个前缀来满足条件 那么以单价为下标建主席树,维护区间的最大体积和 以及满足这个最大体积需要的价钱 然后二分答案,再在主席树上二分,找到恰好满足的那个 ...

  6. selenium的等待~

    既然使用了selenium,那么必然牺牲了一些速度上的优势,但由于公司网速不稳定,导致频频出现加载报错,这才意识到selenium等待的重要性. 说到等待又可以分为3类, 1.强制等待 time.sl ...

  7. configure: error: no acceptable C compiler found in $PATH 问题解决

    解决办法: 安装GCC软件套件 [root@localhost ~]# yum install gccLoaded plugins: fastestmirrorLoading mirror speed ...

  8. wildfly 10上使用最新的 Hibernate ORM OGM

    ORM是关系型数据库连接:ogm是No sql数据库连接,Mongo, redis等. 1,下载ogm zip包,解压到wildfly_home\modules\system\layers\base, ...

  9. 解题:HAOI2018 苹果树

    题面 统计贡献,每个大小为i的子树贡献就是$i(n-i)$,然后子树里又有$i!$种:同时这个子树的根不确定,再枚举这个根是$r$个放的,又有了$r!$种.子树内选点的方式因为子树的根被钦定了顺序所以 ...

  10. 第二十三篇-ubuntu18.04怎么下载播放器以及如何设置默认播放器

    下载播放器 安装命令:sudo apt-get install smplayer再安装解码器: 安装win32codecs包 如果是intel的CPU 代码: sudo apt-get install ...