python的学习之路(3)--斐波那契数列、函数

python的学习之路

序言:这一篇主要讲斐波那契数列、函数

尝试写一个斐波那契数列

斐波那契数列是这样一段数列:
1,1,2,3,5,8,13,21,34,55,89,…1597,2584,4181,…
仔细观察可以发现,从第三个数开始,每一项都等于前两项之和。

基于这一发现,我们可以这样编写一段程序,求出100以内的斐波那契数列:

a, b =0, 1
while b<1000:
    print( b, end = ", " )
    a, b = b, a + b

其中,在print()中,利用end可以将结果输出于同一行或者在每一次输出的结尾加上不同的字符。

函数

在python中可以创建一个自己的函数,这个函数在你的编辑下可以有任何你想要的功能。
形如:

def 函数名 (参数列表):
    函数体

其中,使用关键字def告诉python你要定义一个函数,任何传入参数和自变量必须放在()中,同时()可以用于定义参数。
**return[表达式]**结束函数,选择性的返回一个值给对方调用。不带表达式的return相当于返回None.

向函数传递信息并调用

下面举一个例子:

def greet_user( username ): 
    print( 'Hello, ' + username.title() + '!' )
def money( pay, total ):
    return pay - total

greet_user( 'Ashley' )
P = 100
T = 99
print"I'll change you " + str( money( T,C ) ) + "."

定义了两个函数,第一个函数的功能是打招呼,第二个函数的功能是计算找零。

得到结果:

Hello, Ashley!
I'll change you 1.

形参和实参:在greet_user函数的定义中,变量username是一个形参——函数完成其工作所需的一项信息。而在代码码greet_user(‘Ashley’)中,‘Ashley’ 是一个实参。实参是调用函数时传递给函数的信息。
我们调用函数时,将要让函数使用的信息放在括号内。

需要注意的是,位置实参的顺序很重要,如果顺序不正确,很可能会…出乎意料。或者你实在分不清,你可以使用关键字实参。
关键字实参的用法:

def money( pay, total ):
    return pay - total
print( money( pay = 100, total = 99 ) )

给形参一个默认值:
编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用 指定的实参值;否则,将使用形参的默认值。

例如:

def money( pay, total=99 ):
    return pay - total
print( money( 100 ) )

PS:给形参制定默认值时,等号两边不要有空格

不定长参数
我们可能需要一个函数能处理比在声明时更多的参数,这些参数叫做不定长参数。

  • 加星号 * 的参数会以元组的形式导入,存放所有未命名的变量参数。
def print1( a, *b ):
    print( a, b )
print1( 1, 2, 3, 4 )
>>1 ( 2, 3, 4 )

  • 加两个星号 ** 的参数会以字典的形式导入
def print2( a, **b ):
    print( a, b )
print2( 1, c = 3, d = 4 )
>>1 { 'c':3, 'd':4 }

参数传递

在参数的传递过程中,对象的值有可能被修改,但是有几点我们需要知道:

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

传不可变对象实例:

def change( a ):
    a = 8
b = 2
change( b )  #这一过程并未改变b的值
print(b)
>>2  

传可变对象实例:

def change( a_list ):
    a_list。append([ 1, 2, 3, 4 ])
    print( "函数内取值:",a_list )
    return
mylist = [ 10, 20, 30 ]
xhange( mylist )
print( "函数外取值:",mylist )

得到结果:

函数内取值: [10, 20, 30, [1, 2, 3, 4]]
函数外取值: [10, 20, 30, [1, 2, 3, 4]]

匿名函数

使用lambda:

sum = lambda a, b: a+b
print( sum( 25,25 ) )
>>50

导入整个模块

要使得函数可导入,需要先创建模块。
模块式扩展名为 .py 的文件,包含要导入到程序中的代码。
我们可以创建一个用于打招呼的函数:

hello.py


def say_hello( name ):
    print( "Hey " + name.tittle() + " , how's it going!" )

接下来,在创建的hello.py所在的目录中创建另一个名为happy.py的文件,在这个文件中导入个刚刚创建的模块,再调用say_hello()。

happy.py


import hello

hello.say_hello( ashley )

对于这种导入方法,要调用被导入模块中的函数,可以指定导入的模块名称hello和函数名say_hello(),并用“.”分隔他们。

另一种导入方法:

happy1.py


from hello import say_hello

say_hello(ashley)

如果使用from hello import * ,则表示导入hello模块中的所有函数


使用as制定别名
为了简化函数名称,或者防止与现有程序名称冲突, 我们对导入的函数可以制定一个别名。
例如:

from hello import say_hello as s_h

s_h(ashley)

或者我们可以给模块制定别名:

import hello as ho

ho.say_helo(ashley)

感谢观看

感谢观看,欢迎批评指正 😃

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值