零基础学Python:函数精讲

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

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)


全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

 

@拓展

函数的递归(难点)

函数的递归(难点)
函数调用自身的 编程技巧 称为递归
特点

  • 函数内部调用自己
  • 函数内部可以调用其他函数,当然在函数内部也可以调用自己

代码特点

  1. 函数内部的 代码 是相同的,只是针对 参数 不同,处理的结果不同
  2. 当 参数满足一个条件 时,函数不再执行
  • 这个非常重要,通常被称为递归的出口,否则 会出现死循环!

递归阶乘
一个正整数的阶乘(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个数是多少

 

 


提示:递归是一个 编程技巧,初次接触递归会感觉有些吃力!在处理 不确定的循环条件时,格外的有用,例如:遍历整个文件目录的结构

posted @ 2021-03-05 15:50  酸菜鱼学Python  阅读(188)  评论(0编辑  收藏  举报