[python学习笔记]Day3
函数
如:
def is_leapyear(year):
if (year%4 == 0 and year%100 != 0) or (year%400 == 0):
return True
else:
return False
a = is_leapyear(2016)
print(a)
根据上述例子:
- is_leapyear是函数名,python中指向对应的内存地址;如执行时可以,"f = is_leapyear;f(2016)",f也会指向is_leapyear的对应内存地址
- “year”是形式参数,而执行时“2016”是实际参数
- return在函数中作终止,如果不设置return值,默认返回"None"。
默认参数
def show(a1,a2=234): #a2未赋值默认为234
print(a1,a2)
show(111)
show(111,999)
根据上述例子,a2为默认参数,当调用函数时a2未获得传值,则a2将获得默认值,即a2=234。
指定参数
def show(a1,a2):
print(a1,a2)
show(a2=111,a1=999) #不再考虑参数引用顺序
函数的多个参数值一般默认从左到右依次传入,而指定参数则可以任意顺序指定参数。
动态参数(可变长参数)
1.*args,自动转换为元组
def show(*args):
print(args,type(args))
show(1,22,33)
*args代表一个任意长度的元组,可以接受连续一串参数。
2.**kwargs,自动转换为字典
def show(**kwargs):
print(kwargs,type(kwargs))
show(k1=3,k2=22,k3='fake')
**kwargs代表一个字典,参数的形式是“key=value”,接收连续任意多个参数。
注:
def show(*args,**kwargs):
print(args, type(args))
print(kwargs, type(kwargs))
show(11,22,33,44,55,k1='fake',k2=999) #*args必须放在**kwargs前面,如(x,*args,**kwargs)
l = [1,2,3]
d = {'k2': 999, 'k1': 'fake'}
show(l,d) #默认把l,d认作*args所指向的元组中的两个元素,故只打印元组,而字典为空
show(*l,**d) #正确引用方式
应用举例,常应用于format()函数字符串格式化中:
s1 = '{0} is very {1}' #index要吗都有,要吗都没有
s2 = '{name} is very {condition}'
l = ['Li','poor']
d = {'name':'Liu','condition':'rich'}
ret1 = s1.format(*l)
ret2 = s2.format(**d)
print(ret1,ret2)
匿名函数lambda()
如:
f = lambda a: a**2 result = f(2) print(result)
lambda()函数通常只是通过简单的运算返回一个需要的值,等价于:
def f(a):
return a**2
print(f(2))
应用举例:
students = [['Li',100],['Mi',60],['Fa',90]] students.sort( key = lambda x: x[1],reverse = True) print(students)
在利用BeautifulSoup中有这样一个小技巧,可以利用lambda函数和map()函数:
# spider 2
def get_item_info_from(url,data=None):
wb_data = requests.get(url,headers=headers)
soup = BeautifulSoup(wb_data.text, 'lxml')
data = {
'area':list(map(lambda x:x.text,soup.select('ul.det-infor > li:nth-of-type(3) > a'))),
}
#soup.select('ul.det-infor > li:nth-of-type(3) > a')返回的是一个列表,里面存放着如:“四川”“-”“雅安”的text信息
print(data)
递归函数
递归函数就是在自定义函数内部调用其自己,含初始条件和递归两块,如:
# 计算 n!
def f(n):
if n == 1: #初始条件,结束递归
return 1
return n * f(n-1) #递归
注:
# 进入多少层就得退出多少层
# 可以利用断点观察
def f(n):
print(n)
if n/2 > 1:
ret = f(n/2)
print('ret:',ret)
# 当不满足递归条件,即递归完成之后
print('N:',n)
# 开始从这儿返回到上一层
# 注意每一层 N: n 的变化
return n
f(10)
递归函数实现某些功能相对于用循环结构实现,效率要低很多,但是递归函数常见的应用有很多:
1.汉诺塔
counter = 0
def hannuot(n,a,b,c):
'''hannuot(n,a,b,c)表示
把A盘上的n个盘子移动到C上
其中可以用到B'''
global counter
if n == 1:
print 'move disk',n,'from',a,'to',c
else:
hannuot(n-1,a,c,b)
print 'move disk',n,'from',a,'to',c
hannuot(n-1,b,a,c)
counter += 1
n=int(raw_input('input a number,plz:'))
hannuot(n,'left','mid','right')
print counter
hannuot
2.斐波那契数列(兔子数列)
3.随机停车问题
'''车身长为1,停车场长为5'''
import random
s = 0
def parking(low,high):
if high - low < 1:
return 0
else:
x=random.uniform(low,high-1)
return parking(low,x) + 1 + parking(x+1,high)
for i in range(1000):
s =s + parking(0,5)
print s/1000.0
random parking
Python内置函数
python有大量的内置函数,如下图所示:

下面介绍几种常用的内置函数:
1.all()函数,括号内的参数为列表,如果当所有元素都为真时返回True,否则返回False
# all()函数,括号内参数为列表,当列表中的所有元素都为真时返回True,否则返回False a = all([]) b = all([[]]) c = all([11,22,33]) print(a,b,c)
2.any()函数,类似于all()函数,当列表中有一个元素为真时则返回True,否则返回False
3.ascii()函数,返回一个可打印的对象字符串方式表示。当遇到非ASCII码时,就会输出\x,\u或\U等字符来表示,与repr()函数等效
ascii(2)
>>> '2'
ascii('c')
>>> "'c'"
ascii('程')
>>> "'\\u7a0b'"
4.bytearray()函数,转换成字节数组;bytes()转换成字节
bytearray('python',encoding='utf8')
>>> bytearray(b'python')
bytes('python',encoding='utf8')
>>> b'python'
bytes(2)
>>> b'\x00\x00'
5.callable()函数,判断是否可被调用执行
def f():
return 1
x = callable(f)
l = 23
y = callable(l) #即f()可被调用,而l()不行
print(x,y)
6.chr()函数,通过括号内的序号得到对应的ASCII码值,ord()通过括号内ASCII码得到对应的序号值
>>> ord('A')
65
>>> chr(65)
'A'
7.filter()函数,对于序列中的元素进行筛选,最终获取符合条件的序列;map()函数,遍历序列,对序列中每个元素进行操作,最终获取新的序列


代码示例:
lst = [11,22,33,44] new_lst1 = list(map(lambda x: x*100,lst)) new_lst2 = list(filter(lambda x: x>22,lst)) print(new_lst1,new_lst2)
8.round()函数,四舍五入
a = round(9.9) b = round(9.3) print(a,'\n',b)
[python学习笔记]Day3的更多相关文章
- Python学习笔记——Day3
Python字典(Dictionary) 字典是一种可变容器模型,可存储任意类型对象. 字典的每个键值(key => value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花 ...
- Python学习笔记 - day3 - 数据类型及运算符
Python的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同 ...
- python学习笔记Day3
set有点:1.访问速度快 2.天生解决了重复问题 tuple与set区别: 元组可重复,set不可重复创捷集合1 >>> s1.add('alex')>>> pr ...
- 【目录】Python学习笔记
目录:Python学习笔记 目标:坚持每天学习,每周一篇博文 1. Python学习笔记 - day1 - 概述及安装 2.Python学习笔记 - day2 - PyCharm的基本使用 3.Pyt ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- VS2013中Python学习笔记[Django Web的第一个网页]
前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
随机推荐
- SQL Server Profiler:使用方法和指标说明
SQL Server Profiler的中文意思是SQL Server事件探查,一个Sql的监视工具,可以具体到每一行Sql语句,每一次操作,和每一次的连接.感觉这个工具的作用还是很大的,给大家分享一 ...
- sql 查询 – left join on
1. 问题引入 主要是为了查询在一个表中出现,而不在另一个表中出现的数据,具体来说: 如下图所示, 有A.B两个表,其中B表的Aid字段参照A表的主键id,为了查询在A表中出现,却没有被B表引 ...
- Apache+PHP+Mysql 集成环境 几个软件pk
WampServer 2.5 64位 - 工具软件 - 源码之家 2014年8月25日 - WampServer是Apache+PHP+Mysql 集成环境,拥有简单的图形和菜单安装和配置环境.支持2 ...
- Java 10大精华文章收集001
Java语言与JVM中的Lambda表达式全解 Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期Java Magazine中的一篇文章,它介绍 ...
- ubuntu 修改默认root及密码
安装完Ubuntu后忽然意识到没有设 置root密码,不知道密码自然就无法进入根用户下.到网上搜了一下,原来是这麽回事.Ubuntu的默认root密码是随机的,即每次开机都有一个新的 root密码.我 ...
- Devexpress treelist 树形控件 实现带三种状态的CheckBox
树形控件是使用频率很高的一种控件.对于属性控件往往需要下面两个功能 1.TreeList带有CheckBox,并且节点要有三种状态(所有的子节点都选中,所有的子节点都没选择,一部分子节点选中).使用 ...
- IOS中多版本,多设备类型支持注意事项
IOS系统从07年出来,到现在也有6年了,每年发布一次到两次新的设备,从iPhone1,iPhone2 ... iPhone4s再到最新的iPhone5.硬件在升级的过程中CPU的架构也可能发生变化, ...
- jQuery手机端上拉刷新下拉加载更多页面
基于jQuery手机端上拉下拉刷新页面代码.这是一款类似QQ空间客户端或者微信下拉刷新页面特效代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id=" ...
- 【.Net底层剖析】2.stfld指令-给对象的字段赋值
.Net底层剖析目录章节 1.[深入浅出.Net IL]1.一个For循环引发的IL 2.[.Net底层剖析]2.stfld指令-给对象的字段赋值 3.[.Net底层剖析]3.用IL来理解属性 引言: ...
- 创意设计展示:折叠效果在移动 App 中的应用
在今天在移动 App 界面设计中,你可以看到不同创意类型的视觉效果.特别是在 Dribbble 上面,有有很多应用程序的 UI 概念设计,让你惊叹.当然,他们大多只是作为一个概念设计,可能永远也不会成 ...