四、函数

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. IntentFilter打印方法

    转载请注明出处:http://blog.csdn.net/droyon 在我们进行Android应用程序开发时.我们有时须要对某个对象进行打印输出.以方便我们进行调试. 非常多对象实现了toStrin ...

  2. js闭包的本质

    js之所以会有闭包,是因为js不同于其他规范的语言,js允许一个函数中再嵌套子函数,正是因为这种允许函数嵌套,导致js出现了所谓闭包. function a(){ function b(){ }; b ...

  3. Oracle常用SQL与练习

    基本 数学函数 rownum相关 分页查询 (假设每页显示10条) 不包含排序: 包含排序: 时间处理 1. to_char和to_date基本使用 eg1: eg2: 2)months_betwee ...

  4. BZOJ_3209_花神的数论题_组合数+数位DP

    BZOJ_3209_花神的数论题_组合数+数位DP Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 描述 话说花神这天又 ...

  5. 【转载】Java方向如何准备BAT技术面试答案(汇总版)

    作者:微信公众号JavaQ链接:https://www.nowcoder.com/discuss/31667?type=0&order=0&pos=11&page=1来源:牛客 ...

  6. Activiti6.0教程 28张表解析 (三)

    使用Activit的朋友都知道Activiti对应的有28张表,今天我们就来说下Activit中28张表对应的含义是什么? 如何创建表? 在Activiti中创建表有三种方式,我们依次来看下: 一.通 ...

  7. 【原创】《从0开始学Elasticsearch》—初识Elasticsearch

    目录 1. Elasticsearch 是什么2. Elasticsearch 中基本概念3. Elasticsearch 安装4. 访问 Elasticsearch 1. Elasticsearch ...

  8. ACM_给你100块钱

    给你100块钱 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小光见到昨晚旭能神没拿到一血,又损失了一百块,很同情他.但是为了不 ...

  9. 员工管理系统(集合与IO流的结合使用 beta3.0 BufferedReader / ObjectOutputStream)

    Employee.java package cn.employee_io; public class Employee { private String empId; private String n ...

  10. SpringCloud开发学习总结(六)—— 结合注解的AOP示例

    面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP ...