zoukankan      html  css  js  c++  java
  • python学习笔记-02

    四、函数

    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有一样的属性和方法,可以说,“他们真是一个模子刻出来的!”

  • 相关阅读:
    leetcode 33. Search in Rotated Sorted Array
    leetcode 32. Longest Valid Parentheses
    leetcode 28. Implement strStr()
    leetcode 27. Remove Element
    leetcode 26. Remove Duplicates from Sorted Array
    leetcode 24. Swap Nodes in Pairs
    leetcode 22. Generate Parentheses
    树莓派的频率管理和热控制
    sql执行insert插入一条记录同时获取刚插入的id
    全程直播个人博客重构过程,采用springboot+dubbo+jpa技术栈。
  • 原文地址:https://www.cnblogs.com/vitas/p/5259640.html
Copyright © 2011-2022 走看看