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:\n")

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)
posted @ 2018-11-20 22:08  Master跑跑  阅读(466)  评论(0编辑  收藏  举报