四、函数

1、定义函数

(1)定义规则

介绍列表方法的时候已经大概说过函数,学过数学的人都知道函数,给一个参数返回一个值。函数也可以自己定义。用如下的格式:

>>>def 函数名(参数): 输入函数代码

函数代码中,return表示返回的值。比如定义一个平方函数square(x),输入参数x,返回x的平方:

——————————————

>>> def square(x):return x*x

>>> square(9)

81

——————————————

有的函数看起来不返回任何值,其实返回的是布尔值(true,false):

——————————————

>>> def m(x):return x%2!=0 and x%3!=0

>>> m(6)

False

>>> m(8)

False

>>> m(11)

True

——————————————

上面的例子定义了一个m函数,该函数的参数为x,当x既不能被2整除也不能被3整除时,返回true。

(2)定义变参数函数

有时需要定义参数个数可变的函数,有几个方法可以做到:

  • 给参数指定默认值

比如,定义参数f(a,b=1,c=’hehe’),那么在调用的时候,后面两个参数可以定义也可以不定义,不定义的话默认为b=1,c=’hehe’,因此如下调用都可以:

F(‘dsds’);

F(‘dsds’,2);

F(‘dsds’,2,’hdasda’);

  • 参数关键字

上面的方法等于固定了参数的位置,第一个值就是第一个参数的赋值。而“参数关键字”方法,其实是固定了参数关键字,比如仍然定义参数 f(a,b=1,c=’hehe’),调用的时候可以用关键字来固定:

F(b=2,a=11)

位置可以动,只要参数关键指出来就可以了。

  • 可变参数列表

这是最不常用的方法,在这个阶段先略去。

2、常用函数

介绍列表方法的时候已经大概说过函数,在“数说工作室”微信公众号里回复pyhon1,查看第一天的python日记。这里再补充一下几个比较重要的函数,有一个大致的了解和印象。

(1)zip()、range()、eval()、input()和raw_input()
  • zip(序列1,序列2, …)

把两个序列压缩在一起。

——————————————

>>> m=[12,45,32,98]

>>> n=['Ansel','Jiayounet','Shushuo']

>>> zip(n,m)

[('Ansel', 12), ('Jiayounet', 45), ('Shushuo', 32)]

——————————————

顺便提一下,如果想把这个压缩的结果按照字典的形式显示出来怎么办?即{Ansel’:12, ’Jiayounet’:45, ‘Shushuo’:32}这样的形式,使用第一天说到的dict函数即可,

——————————————

>>> z=zip(n,m)

>>> z

[('Ansel', 12), ('Jiayounet', 45), ('Shushuo', 32)]

>>> dict(z)

{'Ansel': 12, 'Shushuo': 32, 'Jiayounet': 45}

——————————————

可以在微信公众号里回复dict函数,查看该函数的具体使用方法。

  • range()函数

可以产生一个列表:

range(结束数值)

产生一个从0到结束数值-1的列表;

range(起始值,结束值,步长)

产生一个从起始值到结束值-1,间隔为步长的列表,步长默认为1。

——————————————

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1,7)

[1, 2, 3, 4, 5, 6]

>>> range(1,7,2)

[1, 3, 5]

——————————————

  • eval()函数

eval(参数),里面的参数是一个字符串,eval的作用就是把这个字符串变成一个表达式,比如下面这个例子,无论x等于多少,'x+1'就是一个字符串,而经过eval函数之后,'x+1'就变成了一个表达式,x是某个值,那么'x+1'就是这个值加上1。

——————————————

>>> x=1

>>> 'x+1'

'x+1'

>>> eval('x+1')

2

——————————————

  • input()与raw_input()

这两个函数一样,都是输出函数,可以搜集用户输入的信息,并返回出来。比如:

——————————————

>>> input('what s your name?')

what s your name?

——————————————

这时你在后面输入'shushuo',那么就会返回'shushuo':

——————————————

>>> input('what s your name?')

what s your name? 'shushuo'

'shushuo'

——————————————

Input与raw_input的不同地方在于,input必须要输入合法的语句,比如字符串就一定要加引号,数字可以直接输入数字,必须是合法的,但实际上每次输入字符串的时候加引号太麻烦了,raw_input的功能在于把所有的输入都当成原始数据,然后放入字符串中,不需要注意合法性。

——————————————

>>> raw_input('what s your name?')

what s your name?shushuo

'shushuo'

>>> raw_input('how old are you?')

how old are you?27

'27'

——————————————

Python还有很多函数,不一一列举,Python还内置了一些非常有趣也非常有用的函数,这充分体现了Python的魅力,下面四个就是。

(2)map、reduce、filter

这几个是比较特殊有趣的函数,它们都是对一个集合进行处理。filter是过滤,map用于映射,reduce用于归并,是Python列表的三驾马车。

  • filter(布尔函数,序列)

这个函数的功能相当于一个过滤器,将序列中的每个元素放入这个布尔函数中,返回值为true的元素。

——————————————

>>> def f(x):return x % 2 !=0 and x%3!=0

>>> filter(f,range(2,25))

[5, 7, 11, 13, 17, 19, 23]

——————————————

上面的例子定义了一个f函数,该函数的参数为x,当x既不能被2整除也不能被3整除时,返回true。

  • map(函数,序列)

将序列的值一个一个代入函数中,返回到函数得到的值,

——————————————

>>> def s(x):return x*x

>>> map(s,range(8))

[0, 1, 4, 9, 16, 25, 36, 49]

——————————————

上面的例子先定义了一个函数s,返回参数x的平方。此外,map也支持多个序列,即:

map(函数,序列1,序列2,…)

注意两个序列的长度要一样。

——————————————

>>> def p(x,y):return x*y

>>> map(p,range(5),range(1,10,2))

[0, 3, 10, 21, 36]

>>> map(None,range(5),range(1,10,2))

[(0, 1), (1, 3), (2, 5), (3, 7), (4, 9)]

——————————————

这个None表示不做任何操作,将序列1和序列2单纯的压缩在一起,和zip函数的作用差不多。

  • reduce(函数,序列)

首先以序列中的前两个元素调用函数,再以返回值和第三个元素调用,直到最后一个,返回一个最终值。

——————————————

>>> def add(x,y): return x + y

>>> reduce(add, range(1, 11))

55

——————————————

最后55的结果相当于1+2+3+4+5+6+7+8+9+10。

五、循环与条件

注意Python是用缩进来标识出哪一段属于本循环。

1、if语句

也是注意一是缩进,二是条件后面有冒号:

——————————————

>>> j=2.67

>>> if j<3:

print 'j<3'

j=j+1

j<3

——————————————

对于多条件,注意的是elseif要写成elif,标准格式为:

if 条件1:

执行语句1

elif 条件2:

执行语句2

else: 执行语句3

注意if…elif…else三个是并列的,不能有缩进:

——————————————

>>> t=3

>>> if t<3:

print 't<3'

elif t==3:

print 't=3'

else: print 't>3'

t>3

——————————————

2、while true/break语句

该语句的格式为

while true即条件为真:

执行语句

if中断语句条件 : break

看个例子:

——————————————

>>> a=3

>>> while a<10:

a=a+1

printa

ifa==8:break

4

5

6

7

8

——————————————

虽然while后面的条件是a<10,即a小于10的时候一直执行,但是if条件中规定了a为8时就break掉,因此,输出只能输到8。

3、for语句

不多说了,可以遍历一个序列/字典等。

——————————————

>>> a=[1,2,3,4,5]

>>> for i in a:

print i

1

2

3

4

5

——————————————

4、循环与条件中的else

值得注意的是在Python中,else语句不仅可以应用在if语句中,还可以用在其循环语句中

看下面两个例子:

——————————————

>>> for i in range(0,10):

if i>10:

break

else:

print"hello world"

hello world

——————————————

range(0,10)的序列为[0,1,2,3,4,5,6,7,8,9],可以正常遍历完而不进入if语句中的break,因此执行else语句,输出hello world。下面的语句进入了break,将不执行输出hello world:

——————————————

>>> for i in range(0,10):

if i>5:

break

else:

print "hello world"

——————————————

同样的,while语句也可以与else连用:

——————————————

>>> i=0

>>> while i in range(0,10):

i=i+1

if i>10:

break

else:

print "hello world"

hello world

——————————————

5、列表推导式:轻量级循环

列表推导式,是利用其它列表来创建一个新列表的方法,工作方式类似于for循环,格式为:

[输出值 for 条件]

当满足条件时,输出一个值,最终形成一个列表:

——————————————

>>>[x*x for x in range(10)]

[0, 1, 4, 9,16, 25, 36, 49, 64, 81]

>>>[x*x for x in range(10) if x%3==0]

[0, 9, 36, 81]

——————————————

如上的例子就是利用序列[0,1,2,3,4,5,6,7,8,9],生成了一个新的序列。

六、类

作为第二天的Python学习,先对类有一个大致的印象吧。

1、闲说类与对象

类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。

而对象,是类的一个具体。它是一个实实在在存在的东西。如果上面说的“人”是一个抽象的类,那么你自己,就是这个类里一个具体的对象。

一个类的对象,也叫一个类的实例。再打个比方,类好比一个模具,对象就是用这个模具造出来的具有相同属性和方法的具体事物,俗话说:“他俩真像,好像一个模子刻出来的”,就是指的这个意思。

那么用这个模具造一个具体事物,就叫类的实例化。下面看一个具体的类:

2、定义一个类

——————————————

>>> class boy:

gender='male'

interest='girl'

def say(self):

return 'I am aboy!'

——————————————

上面的语句定义了一个类boy,我们来根据这儿类的模型构造一个具体的对象:

——————————————

>>> peter=boy()

——————————————

现在来看看peter这个具体的实例有哪些属性和方法。

“什么叫属性和方法?”

它们都是“类”的两种表现,静态的叫属性,动态的叫方法。比如“人”类的属性有姓名、性别、身高、年龄、体重等等,“人”类的方法有走、跑、跳等等。

——————————————

>>> peter.gender

'male'

>>> peter.interest

'girl'

>>> peter.say()

'I am a boy!'

——————————————

这里gender和interest是peter的属性,而say是他的方法。如果再实例化另一个对象比如sam:

——————————————

>>> sam=boy()

——————————————

那么sam和peter有一样的属性和方法,可以说,“他们真是一个模子刻出来的!”

python学习笔记-02的更多相关文章

  1. 【python学习笔记02】python的数据类型2

    列表和元组之间的主要区别是:列表括在括号([])和它们的元素和大小是可以改变的,而元组在圆括号(),不能被更新.元组可以被认为是只读列表. 存储在一个列表中的值可以使用切片操作符来访问([]和[:]) ...

  2. python学习笔记02 --------------基础数据类型

    python的基本数据类型: 1.基本数据 1.1. 数字类型 1.1.1 整数 int int()           #将括号内内容转化为整数类型. 1.1.2 浮点数 float 1.1.3 复 ...

  3. python学习笔记02:运行python程序

    1.启动cmd命令行,输入python后回车,运行python解释器: 输入python代码后回车: print('Hello World')

  4. Python字符串(Python学习笔记02)

    字符串 Python 3 中的字符串可以使用双引号或单引号标示,如果字符串出现引号,则可以使用 \ 来去除引号标示字符串的作用. 几种字符串的表示方法: str1 = "hello" ...

  5. Python学习笔记02

      元组:圆括号的,不能进行赋值操作,即不可更改. 列表:方括号的,可以修改. 访问:均使用下标访问   # 元组是一个静态列表,初始化之后就不可以修改,可以试任意类型 tuple1 = ('a st ...

  6. Python 学习笔记02篇

    之前很庆幸早点报名课程 可以早点看到视频讲解,不至于后期太赶 不得不说原本21天压缩到14天再压缩到7天,如果可以完整且独立地完成至少三个作业,那水平应该真的很不错吧

  7. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  8. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  9. Python学习笔记:装饰器

    Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...

随机推荐

  1. java Http post请求发送json字符串

    最近差点被业务逻辑搞懵逼,果然要先花时间思考,确定好流程再执行.目前最好用的jar包还是org.apache.http. public class HttpClientHelper { private ...

  2. leetcode 659. Split Array into Consecutive Subsequences

    You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...

  3. div内鼠标坐标位置及绝对和相对坐标获取

    JQuery 获得div绝对,相对位置的坐标方法   1 2 3 4 5 6 获取页面某一元素的绝对X,Y坐标 var X = $('#DivID').offset().top; var Y = $( ...

  4. YTU 2897: E--外星人供给站

    2897: E--外星人供给站 时间限制: 2 Sec  内存限制: 128 MB 提交: 20  解决: 13 题目描述 外星人指的是地球以外的智慧生命.外星人长的是不是与地球上的人一样并不重要,但 ...

  5. HTML5、javascript写的craps游戏

    1. [代码][HTML]代码   <!DOCTYPE HTML><html><head><meta charset="utf-8"> ...

  6. 并不对劲的bzoj2638

    为了反驳很对劲的太刀流,并不对劲的片手流决定与之针锋相对. 很对劲的太刀流-> 2638: 黑白染色 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit ...

  7. AutoIT: 下载文件函数

    Func down() $Size=InetGetSize($a[$j][]);获得FTP上的文件的大小 InetGet($a[$j][],$a[$j][],,);下载 ProgressOn(],), ...

  8. 2.jeesite增删改查

    一.准备数据 在数据库中中添加一张表和数据,以mysql为例 SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------- ...

  9. Rails 浅谈 ActiveRecord 的 N + 1 查询问题(copy)

    [说明:资料来自https://ruby-china.org/topics/32364] ORM框架的性能小坑 在使用ActiveRecord这样的ORM工具时,常会嵌套遍历model.例如,有两个m ...

  10. linux上用mplayer播放264文件

    Linux上,264视频裸码流可用mplayer进行播放. 同时,可用-fps参数控制帧率. 参考:http://www.chinavideo.org/archiver/?tid-16088.html