零基础学Python:函数精讲
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
1. 位置参数与关键字参数
尽管这种方式很常见,但是位置参数的一个弊端是必须熟记每个位置的参数的含义。在调用函数 f()时误把最后一个参数当作第一个参数,会得到完全不同的结果:
关键字参数
为了避免位置参数带来的混乱,调用参数时可以指定对应参数的名字,甚至可以采用与函数定义不同的顺序调用:
你也可以把位置参数和关键字参数混合起来。首先,实例化参数 ,然后对参数使用关键字参数的方式:
如果同时出现两种参数形式,首先应该考虑的是位置参数。
默认参数
当调用方没有提供对应的参数值时,你可以指定默认参数值。这个听起来很普通的特性实际上特别有用,以之前的例子为例:
2.不定参数
*args
位置参数(了解)
在不清楚传入参数是多少个
无参数调用函数,则什么也不会返回:
给函数传入的所有参数都会以元组的形式返回输出:
这样的技巧对于编写像 print() 一样接受可变数量的参数的函数是非常有用的。如果你函数同时有限定的位置参数,那么 *args 会收集剩下的参数:
当使用 * 时不需要调用元组参数 args,不过这也是 Python 的一个常见做法。
**kwargs
关键字参数
使用两个星号可以将参数收集到一个字典中,参数的名字是字典的键,对应参数的值是字典的值。下面的例子定义了函数 print_kwargs(),然后打印输出它的关键字参数:
案例:
案例:假设 python 中的 print 不能一次性传入多个参数使用了,让我们自己实现 print 可以传递多个参数的功能。
要求:自己编写一个 changed_print 函数实现原本 print 的功能。
例:原本函数的功能
3. 一等公民函数
在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满足下述条件的程序实体:
在运行时创建
能赋值给变量或数据结构中的元素
能作为参数传给函数
能作为函数的返回结果
在 Python 中,整数、字符串和字典都是一等对象——没什么特别的。接下来的内容将重点讨论把函数作为对象的影响和实际应用。
比如说我要将之前函数修改一个名字,使用新的函数名去调用旧的函数
把函数当参数传递
案例需求 f(1) + f(2) + f(3) + f(4) + f(5)
设:求 f(1) + f(2) + f(3) + f(4) + f(5) + ...+f(N)
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
@拓展
函数的递归(难点)
函数的递归(难点)
函数调用自身的 编程技巧 称为递归
特点
函数内部调用自己
函数内部可以调用其他函数,当然在函数内部也可以调用自己
代码特点
函数内部的 代码 是相同的,只是针对 参数 不同,处理的结果不同
当 参数满足一个条件 时,函数不再执行
这个非常重要,通常被称为递归的出口,否则 会出现死循环!
递归阶乘
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积。自然数n的阶乘写作n!。
1、当n=0时,n!=0!=1
2、当n为大于0的正整数时,n!=1×2×3×…×n
示例:函数调用本身
斐波那契数列
斐波那契数列(Fibonacci sequence),又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、 8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的 方法定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n>=3,n∈N*) 每一位数都等于前两位数之和,在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。
1.定义一个函数 fib
2.能够接收一个 num 的整数参数
3.计算 1 + 1 + 2 + 3 + 5 + 8 ... num 的结果
第N个数是多少
提示:递归是一个 编程技巧,初次接触递归会感觉有些吃力!在处理 不确定的循环条件时,格外的有用,例如:遍历整个文件目录的结构