作为计算机代码的一种抽象方式,函数在Python中扮演了极为重要的角色。今天给大家介绍Python函数的定义、参数的传入以及调用方式。其中函数参数的传入方式为本节重点内容。Python函数的参数形式包括必选参数、默认参数、可变参数、命名关键字参数以及关键字参数。五类参数可单独传入也可组合传入。

>>>>

Python 函数的定义

Python中使用def语句来定义函数,然后依次写出函数名、括号、括号内的参数以及最后不能忘记的冒号,函数体需另起一行在缩进块中编写,最后返回值用return语句执行。看一例求绝对值的自编函数:

def f_abs(x):
    if x >=0:
        return x
    else:
        return -x

当然,如果你已经通过pycharm将f_abs保存为abstest.py文件的话,可以通过cmd在当前文件目录下启动Python然后直接导入函数模块来调用f_abs函数:

C:\Users\Administrator>F:
F:\>cd pythoncode>python
>>> from abstest import f_abs
>>> f_abs(-1.0923)
-1.0923

另外我们在编写函数时也可以对函数做参数个数和参数类型的检查,函数也可以返回多个值,但其本质是一个tuple。

>>>>

函数的参数传入

函数参数传入的灵活性使得Python函数十分强大,函数参数除了必选参数之外,还包括默认参数、可变参数、命名关键字参数以及关键字参数。函数参数传递顺序为必选参数>默认参数>可变参数>命名关键字参数>关键字参数。

必选参数:

先定义一个求平方的函数:

def power(x):
    return x*x  
power(-10)
100

可见求平方函数定义起来很方便,但如果我们想求x的更高次幂的话,恐怕这个函数就得改改了,我们需要两个必选参数才能搞定:

def power(x,n):
   s = 1
   while n >0:
       n = n-1 
       s = s*x
    return s
power(10,3)
1000

默认参数:

    当我们重新定义power函数时,原先的只传入一个必选参数的函数就已经失效了,这时候我们就需要默认参数来帮忙了,将参数n的值定义为默认值2:

def power(x,n=2):
  s = 1
   while n >0:
       n = n-1 
       s = s*x
    return s

>>> power(10)
100
>>> power(10,2)
100

从上述例子我们可以看出,默认参数的使用可以简化函数的调用。必选参数在前,默认参数在后,当传入多个参数时,变化大的参数放前面,变化小的参数可作为默认参数放后面,最重要的一点是,默认参数必须指向不变对象!这是设置默认参数时需要注意的。

可变参数:

我们对一组数的平方求和定义一个函数,即a2+b2+c2+...利用可变参数我们可以编写函数:

def jisuan(*numers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

由上面的命令可见可变参数仅仅需要在参数前加上一个*号就可完成对其定义,参数numbers接受的数据类型为一个list或者tuple。当我们已有一个list或者tuple时,我们可以直接将其当作可变参数传入函数中去:

>>> nums = [2,3,5]
>>> jisuan(*nums)
38

关键字参数:

    与可变参数可以传入任意个参数不同的是,关键字参数可以传入任意个含参数名的参数,这样key-value格式显然是以dict的数据类型传入的。且看示例:

def player(name,team,**kw):
    print('name:',name,'team:',team,'other:',kw)
player('Harden','Rockets',city = 'Houston')
name: Harden team: Rockets other: {'city':'Houston'}

显而易见的一点是,关键字参数增加了函数的灵活性,除去必选参数外,用户可通过关键字参数输入任何想要的参数。和可变参数类似的是,我们也可以先定义一个dict,然后将其作为关键字参数传入函数中去:

>>> info = {'city': 'Golden states'}
>>> player('Curry','Worriors',**info)
name: Curry team: Worriors other: {'city':'Golden states'}

命名关键字参数:

    通过关键字参数,我们可以传入任意不受限制的参数,但如果我们想要限制关键字参数的名字,可以使用命名关键字参数,例如只接受city和age作为关键字参数,定义方式如下:

def palyer(name,team,*,city,age):
    print(name,team,city,age)

命名关键字参数需要一个*作为分隔,*后面的参数均为命名关键字参数,这与关键字参数的**大不相同。但如果在此之前函数已有可变参数的话,再定义命名关键字参数的话就不需要*作为分隔符了。示例如下:

def palyer(name,team,*tec,city,age):
    print(name,team,tec,city,age)

需要注意的是,命名关键字参数必需连同参数名一起传入函数中,否则的话Python将会报错。

>>> player('Parker','Spurs',city = 'San Antonio',age = 32)
Parker Spurs San Antonio 32

需要说明的一点是,各类参数可以组合传入函数当中,只是需要注意传入的顺序:必选参数>默认参数>可变参数>命名关键字参数>关键字参数。

>>>>

函数的调用

当我们定义好函数后,相应的函数调用也就十分简单了,直接使用函数名即可完成调用。当然,并不是每个函数都需要我们去自定义,Python基础模块和各类库里面内置了大量函数,我们可直接调用,这一点和R也是类似的。看几个Python函数的例子:

>>> abs(-0.3)
0.3
>>> max(3,0,8,3)
8
>>> int(10.24)
10

Python函数的定义、参数传入与函数的调用的更多相关文章

  1. Python的函数名作为参数传入调用以及map、reduce、filter

    零.python的lambda函数: #lambda function func = lambda x : x+1 #这里是一个匿名函数,x是参数,x+1是对参数的操作 func(1)= 2 多个参数 ...

  2. Lua的函数的定义、math数学函数、lua字符串的处理、lua支持的字符串类、模式串中的特殊字符_学习笔记04

    Lua的函数的定义.math数学函数 定义函数 function [function name] (param1,param2) [function code] --定义一个函数用来求的两个数字的和 ...

  3. 转-C++之虚函数不能定义成内联函数的原因

    转自:https://blog.csdn.net/flydreamforever/article/details/61429140 在C++中,inline关键字和virtual关键字分别用来定义c+ ...

  4. Delphi 函数指针(三大好处:灵活,委托的本质,回调机制),还可把函数指针当参数传入

    首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明 ...

  5. Python-Day3知识点——深浅拷贝、函数基本定义、内置函数

    一.深浅拷贝 import copy #浅拷贝 n1={'k1':'wu','k2':123,'k3':['carl',852]} n2=n1 n3=copy.copy(n1) print(id(n1 ...

  6. C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子

    先来不带参数的回调函数例子 #include <iostream> #include <windows.h> void printFunc() { std::cout<& ...

  7. 预处理、const、static与sizeof-为什么不把所有的函数都定义成内联函数

    1:内联是以代码膨胀(复制)为代价的,仅仅省去了函数调用的开销,从而提高函数的执行效率.如果执行函数体内代码的时间相比于函数调用的开销较大,那么效率的收获会很小.另一方面,每一处内联函数的调用都要复制 ...

  8. flask函数已定义参数却出现takes 0 positional arguments but 1 was given的问题

    在flask中定义了一个简单的删除数据库内容的路由 测试却发现一直报错 说delete_history函数定义时没有接受参数,但是检查delete_history函数却发现没有问题 后来想了半天才发现 ...

  9. JavaScript中匿名函数循环传参数(不触发函数的执行)

    我们都知道定义函数的方式有两种,一种是函数声明,另一种是函数表达式,函数声明的语法是这样的: function functionName(arg0, arg1, arg2) { // 函数体 } 函数 ...

随机推荐

  1. pt-mext

    pt-mext实现的功能比较简单,就是将mysqladmin输出的多次迭代的相同status变量值放到同一行输出. 参数很少,除了--help和--version外,只有一个--relative参数 ...

  2. ES6笔记(一):ES6所改良的javascript“缺陷”

    块级作用域 ES5没有块级作用域,只有全局作用域和函数作用域,由于这一点,变量的作用域甚广,所以一进入函数就要马上将它创建出来.这就造成了所谓的变量提升. ES5的"变量提升"这一 ...

  3. 关于BFC的初步了解以及常见使用

    在学习CSS的过程中,掌握一些常用方法或效果实现的原理对于我们的学习来说是很有帮助的.如最常见的清除浮动和取消外边距塌陷时使用overflow:hidden;,在学习初期往往只知道有这种用法,且使用时 ...

  4. [Leetcode] Recover Binary Search Tree

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  5. 《final修饰基本类型变量和引用类型变量的区别》

    //final修饰基本类型变量和引用类型变量的区别 import java.util.Arrays; class Person { private int age; public Person(){} ...

  6. TCP通信三次握手的过程

    过程 编辑 第一次 第一次握手:建立连接时,客户端 发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认:SYN:同步序列编号(Synchronize Sequence Nu ...

  7. 大一下C#五子棋大作业

    上学期的作业,从0开始,到会写C#界面,再到设计出AI对战,跟队友一起用了半个学期的时间,现在才过了几个月就感觉有些遗忘了,赶紧来总结一下. 先上文件吧:程序+源代码 编译环境VS2013 百度云的分 ...

  8. pdb文件部分解释

    pdb文件包含了编译后程序指向源代码的位置信息,用于调试的时候定位到源代码,主要是用来方便调试的. 在程序发布为release模式时,建议将 pdb文件删除, 同时,对外发布的时候,也把 pdb删除, ...

  9. 重装eclipse要做的事

    当我们要在新环境上安装eclipse时,往往会做很多的个性修改和安装一些插件,下面就这些做一下总结: 一.插件 1.svn插件(subclipse) 插件官网下载地址:http://subclipse ...

  10. geotrellis使用(三十九)COG 写入更新

    前言 前面介绍过了如何在 ETL 的时候更新 Layer,使得能够在大数据量的时候完成 ETL 操作,同时前两篇文章也介绍了 COG 以及如何在 Geotrellis 中实现 COG 的读取.本文介绍 ...