zoukankan      html  css  js  c++  java
  • python基础函数汇总(二)

    每当你迷茫徘徊的时候,你就可以打开这篇文章,这时候,有人就不懂了,就会来跟我说:“大哥,大哥,这篇文章究竟讲的是啥啊?”

    哎!我现在就有责任和义务向大家介绍一下,这篇文章来自一本书,这本书它有他自己的名字,叫做:派等函数宝典。它是我花费了百年心血,我呕心沥血日夜凝华,在九九八十一天后,最终在火山喷发之时,天崩地裂之时,无数道惊雷交叉升华而产生的一本书。

    这本书,它可以教会你如何掌握python语言,如何用python语言开发你想要的游戏或WEB网站,可以助你实现你的梦想,走上人生巅峰,迎娶白富美。

    但是啊,这本书必须一页一页地翻阅,必须足足翻阅九九八十一页方可完成此书的修炼学习。假如你在没有学习完成之前,冒然翻开最后一页,你是非常容易受到反噬的,轻则失去敲代码的能力,重则直接影响你的现实生活。

    你看看啊,我现在就尝试一下,我就仅仅地揭开最后一页的一个角,“啊啊啊啊啊,反噬太厉害了啊~~~痛死我了~~”

    话说回来啊,这本派等函数宝典在我凝成它的过程中,它逐渐产生了它自己的意识,在翻开第一页准备学习之前,必须对着这本书大声喊出:“派等函数宝典是我爸爸!",方可继续使用。否则这本书将会自焚而灭,你将错过改变命运的机会,终生后悔。

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    def print_two(*apples):                           #*args 的功效与arg1,arg2一致。(复数的应用)
           apple1,apple2=apples                                               #在这儿将 *args改成*apples 不影响运行。             
           print("apple1: %r,apple2: %r"%(apple1,apple2))
     
     
    def print_two_again(arg1,arg2):
        print("arg1: %r,arg2: %r"%(arg1,arg2))
     
     
    以上这两段代码的运行效果是一样的。*args可以理解为一个集合,这个集合等价于arg1,arg2……
     

    再来看看下面的这段长代码
     
    from sys import argv

    script,input_file =argv

    def print_all(f):                          #f只是一个参数,用来寄存变量,是为了下面的函数运行。
        print(f.read())                        #将f寄存的变量进行read()处理。

    def rewind(f):             #在调用一次这个文件之后,我们运用seek(0)将指针移动到文本的开头。
        f.seek(0)                   #好处是不用再打开一次文件。

    def print_a_line(line_count,f):
        print(line_count,f.readline())             #readline()是读取文本的一行的操作。
                                                             #此函数具有记忆功能,在调用过第一次后,下次再调用就是第二行开始读取。
    current_file =open(input_file)

    print("First let's print the whole file: ")

    print_all(current_file)

    print("Now let's rewind, kind of like a tape.")

    rewind(current_file)                  #上列进行过一次函数打印操作,指针在最后面。需要seek(0)将指针移动到文本开始的位置。

    print("Let's print three lines:")

    current_line=1
    print_a_line(current_line ,current_file)                 #readline()确实有记忆功能,每用一次就读取文本的下一行。

    current_line=current_line +1
    print_a_line(current_line,current_file)

    current_line=current_line+1
    print_a_line(current_line,current_file)
     
    这段代码我们先按顺序解释一下:首先在终端输入本文件和要操作的外部txt文件,然后定义了三段函数,每段函数后面有详细的解释。首先是定义一个current_file作为存储open
    处理的外部txt文件内容,然后函数print_all(current_file),打印出这个外部文件的内容。这个时候,下一步的操作可能是一个难点,就是f.seek(0)的操作。其实不难理解,我们刚才打印了一次TXT的内容,这个文件的指针应该是停留在最后面,这时候f.seek(0),也就是current_file.seek(0),将指针移动到第0个字节,也就是文本最开始的位置。这样方便我们继续访问这个txt文件,不影响接下来的操作。下面就不难看懂了,主要是readline()函数,这个函数是读取文本的一行内容的功能,并具有记忆功能,也就是指针位置的移动。第一次使用readline(),会读取第一行的内容,第二次使用就是读取第二行的内容。
    注意,这段代码中出现的f只是一个参数,用来寄存用户将要输入的变量名。 
    那么输出的结果自然是这样,是不是和你想象中的差不多?

    First let's print the whole file:

    wo yao cong nan zou dao bei
    hai yao cong bai zou dao hei
    wo yao zhe tian shang de shui

    Now let's rewind, kind of like a tape.
    Let's print three lines:
    1 wo yao cong nan zou dao bei

    2 hai yao cong bai zou dao hei

    3 wo yao zhe tian shang de shui

     
     
    上面的代码其实挺好理解的,有时候函数就是这样的。就像一个含苞待放的娇羞姑娘,切不可猴急不可急躁,你要沉下心耐心探索,花费一定的时间和努力,在慢慢开发的过程中,你就会逐渐恍然大悟,会得到更多的快乐,然后直通曲径幽深处……咳咳,扯远了,接下来就放个简单的算术函数来理解一下吧!
     
    def add(a,b):
        print("ADDING %d +%d "%(a,b))        #设置一个加法函数
        return a + b                                #意思就是将计算的结果返回赋值变量

    def subtract(a,b):
        print("SUBTRACTING %d - %d"%(a,b))       #设置一个减法函数
        return a -b

    def multiply(a,b):
        print("MULTIPLYING %d *%d"%(a,b))       #设置一个乘法函数
        return a*b

    def divide(a,b):
        print("DIVIDING %d / %d"%(a,b))       #设置一个除法函数
        return a/b

    print("Let's do some math with just functions!")

    age=add(30,5)
    height=subtract(78,4)
    weight=multiply(90,2)
    iq=divide(100,2)

    print("Age:%d,Height:%d,Weight:%d,IQ:%d"%(age,height,weight,iq))

    #A puzzle for the extra credit,type it in anyway.
    print("Here is a puzzle.")

    what=add(age,subtract(height,multiply(weight,divide(iq,2))))       #what是一个提问算式的关键字
    print("That becomes:",what,"Can you do it by hand?")
     
    这段代码很简单,就是一个四则运算,加(add)减(subtract)乘(multiply)除(divide)。
    主要是重点在于最后一段代码(iq=50):
     

    DIVIDING 50 / 2
    MULTIPLYING 180 *25
    SUBTRACTING 74 - 4500
    ADDING 35 +-4426

    That becomes: -4391.0 Can you do it by hand?

    打印出来的结果是这样的,是不是很有意思?运行的顺序是从内而外的,在运行的过程中,函数里面的print依旧是有效的。

    那么我如果出一个题目呢?

    24+34/100-1023,请用函数表达出这个算式。这里我们依旧使用一个what的提问关键字:

    what=subtract(add(24+divide(34,100)),1023)    
    没毛病吧?老铁们
     
     
    再来一段,压压惊:
     
    def secret_formula(started):         #创造一个赋予三个变量值的函数。
        jelly_beans =started*500
        jars=jelly_beans/1000
        crates=jars/100
        return jelly_beans,jars,crates

    start_point =10000
    beans,jars,crates =secret_formula(start_point)          #函数内部的jelly_beans的值返回给外部命名的beans变量。并不一定要一样的变量名。
    print("With a starting point of :%d"%start_point)
    print("We'd have %d beans, %d jars, and %d crates."%(beans,jars,crates))

    start_point=start_point/10

    print("We can also do that this way:")
    print("We'd have %d beans, %d jars,and %d crates."%secret_formula(start_point))
    #格式化符号后面可以直接进行函数运算,但是要注意的是,第一个给%d的变量名是jelly_beans,并不是beans。
     

    以上是一个三变量赋值的一个函数。注意,我在这重点强调一下return,return是一个返回值,作用就是将计算出来的结果返回需要赋值的变量。想必,这时候有人就有疑问了,代码中为什么会有jelly_beans和beans两个不一样的变量名?不会报错吗?其实这两个变量是不一样的,前者是函数内部的变量名,是用来赋值的,后者就是外部的一个变量,是需要被赋值的变量,并不冲突。
     
     
    学习函数要进入最后的一个尾声阶段了,内心依旧是万般的不舍,函数将会成为以后编程过程中的一个主力,学好def函数,打遍天下无敌手。在此,我想放一段代码,并改变以往的解释方式,解释给大家看,这是一段没有输出结果的代码,有的是,四个def函数,文件名是c6.py:
     
    def break_words(stuff):
    """This function will break up words for us."""
    words=stuff.split(' ')
    return words
     
    #split函数是拆分字符串函数的操作,拆分成列表的形式。如果一句话是i love you yan pao pao ,如果split()函数处理,结果是[i,love,you,yan,pao,pao]
    也可以注意本段代码中的split(' '),是把每个分隔出来的单词加上单引号的操作,结果自然是['i','love','you','yan','pao','pao']
    然后把拆分得到的列表 return返回需要赋值的变量。#
     
    上面的理解有误,现在重新修改正确的理解:
     
    split函数是拆分字符串函数的操作,拆分成列表的形式。其中split()括号内的内容不可以为空,必须输入拆分点。
    比如,i love you yan pao pao,这一个句子:如果要拆分这个句子,是不是以空格为拆分点,将单词全部拆分开来?所以处理这句话,应该是split('  '),将拆分点用引号表示出来。
    输出自然是['i','love','you','yan','pao','pao']。

    那么,如果要拆分www.baiidu.com这个句子呢?这时候拆分点是不是一个英文句号?所以应该这么处理,split(" . ") 

    输出结果自然是["www","baidu","com"]

     
    def sort_words(words):
    """Sorts the words."""
    return sorted(words)
     
    有时候,函数可以是这样写的形式,第一句def定义,第二句return返回,就可以完成函数的编写。
    实际上,就是将函数的操作放到了return后面。
    sorted()函数就是将一个列表临时排序,按26个字母的顺序。注意是临时的排序,sorted()。
     

    def print_first_word(words):
    """Prints the first word after popping it off."""
    word=words.pop(0)
    print(word)
     
    pop()函数的功能是弹出列表中的最后一个元组,并且可以改变被pop()函数影响的列表里面的值,并非临时性。
    pop(0)自然是弹出第一个元组。
    如果想验证一下列表是否真的发生改变,print(words)即可。

    def print_last_word(words):
    """Prints the last word after popping it off."""
    word=words.pop(-1)
    print(word)
     
    其实pop()和pop(-1)是一样的功能,都是弹出最后一个函数。但是为什么要介绍呢,有时候我们处理的列表是很长的,你不并清楚里面有多少个元组,这时候你想弹出倒数第二个元组,那就是pop(-2)即可弹出去。

    def sort_sentence(sentence):
    """Takes in a full sentence and returns the sorted words."""
    words=break_words(sentence)
    return sort_words(words)
     
    这段函数设计的非常好,是函数中有函数,也就是二次函数运算,第一次的函数运算放到第二行,第二次函数运算放到return后面,这样使代码看起来更加简洁美观。

    def print_first_and_last(sentence):
    """Prints the first and last words of the sentence."""
    words=break_words(sentence)
    print_first_word(words)
    print_last_word(words)

    def print_first_and_last_sorted(sentence):
    """Sorts the words then prints the first and last one."""
    words=sort_sentence(sentence)
    print_first_word(words)
    print_last_word(words)
  • 相关阅读:
    如何安全的创建线程池?
    【Java Proxy Pattern】Java的代理模式
    php全局变量/局部变量/静态变量
    php strstr()
    微信公众号开发(四):js-sdk的应用
    微信公众号平台开发(三):几大微信接口的调用
    php操作数据库
    微信公众号开发(一)--开发模式与编辑模式
    微信公众平台开发(二):交互与接口
    day6 字典的增减查删
  • 原文地址:https://www.cnblogs.com/Masterpaopao/p/9992020.html
Copyright © 2011-2022 走看看