函数

如:

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)

根据上述例子:

  1. is_leapyear是函数名,python中指向对应的内存地址;如执行时可以,"f = is_leapyear;f(2016)",f也会指向is_leapyear的对应内存地址
  2. “year”是形式参数,而执行时“2016”是实际参数
  3. 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的更多相关文章

  1. Python学习笔记——Day3

    Python字典(Dictionary) 字典是一种可变容器模型,可存储任意类型对象. 字典的每个键值(key => value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花 ...

  2. Python学习笔记 - day3 - 数据类型及运算符

    Python的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同 ...

  3. python学习笔记Day3

    set有点:1.访问速度快 2.天生解决了重复问题 tuple与set区别: 元组可重复,set不可重复创捷集合1 >>> s1.add('alex')>>> pr ...

  4. 【目录】Python学习笔记

    目录:Python学习笔记 目标:坚持每天学习,每周一篇博文 1. Python学习笔记 - day1 - 概述及安装 2.Python学习笔记 - day2 - PyCharm的基本使用 3.Pyt ...

  5. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  6. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  7. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  8. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  9. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

随机推荐

  1. 【书单】book list

    正在看: [泡沫经济学].(日)野口悠纪雄 数学模型--姜启源 R in action Programming with R Scrapy Parallel R     准备看: Advanced.A ...

  2. 系统UINavigationController使用相关参考

    闲来无事便在网上google&baidu了一番UINavigationController的相关文章,然后又看了下官方文档:看看更新到iOS7之后UINavigationController的 ...

  3. Python初学者需要注意的问题

    一.注意你的Python版本 Python官方网站为http://www.python.org/,当前最新版本为3.4.0 alpha,稳定版本为3.3.2,在3.0版本时,Python的语法改动较大 ...

  4. SQL Server 问题 1 - SQL Server encountered error 0x80070422/0x8007042d

    今天执行SQL Server 2014的full-text search 查询操作:select * from table where contains(summary, 'smith') 报出如下错 ...

  5. 用 Python 和 OpenCV 检测图片上的条形码

      用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...

  6. VS2012未找到与约束ContractName...匹配的导出

    用VS2012创建ARCGIS插件项目时,提示“未找到与约束ContractName...匹配的导出”,此前一直都是正常的额 经查,发现是近期系统相关更新导致,解决办法有两种途径: 一是删除近期更新的 ...

  7. MyBatis知多少(6)表现层与业务逻辑层

    表现层 表现层负责向最终用户展示应用程序的控制方式以及数据.它还要负责所有信息的布局和格式.今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏 ...

  8. Linux命令:ps / top

    简介:ps - report a snapshot of the current processes. 用途:获取当前时刻程序运行状态 概要:ps [options] 类型:ps is hashed ...

  9. Tips12: 私人定制 专属的Unity3D 脚本模板

    在使用U3D的过程中,新建一个C#脚本,它包含着空的Start()和Update()函数.  根据个人习惯的不同,可能有些人有着自己的脚本风格,每次进去都增删改很麻烦,这里介绍一个更改新建脚本模板的方 ...

  10. 使用Html5+C#+微信 开发移动端游戏详细教程 :(五)游戏图像的加载与操作

    当我们进入游戏时,是不可能看到所有的图像的,很多图像都是随着游戏功能的打开而出现, 比如只有我打开了"宝石"菜单才会显示宝石的图像,如果是需要显示的时候才加载, 会对用户体验大打折 ...