函数的定义

Python的函数定义使用关键字def,如定义一个返回绝对值的函数my_abs

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

函数调用

参数错误

如果在调用函数时,传给函数的参数增多或减少,python解释器都会检查出来

TypeError:提示my_abs()只需一个参数,但是调用时给了两个

虽然python解释器能检查到参数个数的变化,但当给函数一个非法类型的参数时,就无法准确检测到

解释器虽然给出了错误,但是没有定义具体是哪种错误

参数类型检查

python提供了内置函数isinstance()来判断参数的数据类型

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('wrong type......')
    if x >= 0:
        return x
    else:
        return -x

改写了my_abs函数后,如果传参不是int或float类型,则会报错并给出错误信息'wrong type'

函数的参数

python的函数定义虽然相对简单,但是参数种类非常灵活。如正常的必须参数,还有默认参数、可变参数以及关键字参数

位置参数

即必须参数,在传参时按照函数定义的顺序赋给函数

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

定义一个函数power()来求x的n次方,在调用时根据函数定义的顺序传参。不同的位置顺序得到不同的结果

默认参数

同其他编程语言一样,python在定义函数时可通过设置默认参数来避免因某些参数没有传入而导致的错误

如power(x, n),如果没有传入参数n则会引起错误

解释器提示power()缺少一个必须的参数n。来使用默认参数来改进一下power函数

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

两种形式的函数调用都能正常运行,这正是因为默认函数的作用。当参数都给全时,函数按照给定的参数进行运算;当参数n未传入时,函数按照设置的默认参数进行运算

可变参数

可变参数即参数的个数是可变的,在定义函数时,无需一个一个的给定

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

定义一个add函数用来计算参数的和

通过可变参数,我们可以传入任意个参数来调用函数进行运算

关键字参数

不同于可变参数,关键字参数允许传入0或任意个含参数名的参数,这些关键字参数在函数内部自动组合成dict

def student(name, age, **args):
    print('name: ', name, 'age: ', age, 'other: ', args)

**args:代表传入的是关键字参数

命名关键字参数

上述student函数可以接收除name,age外的任意参数,但是如果需要限制接收的参数就要用到命名关键字参数

假设对于student信息还只需要一个city信息,可以改写student函数如下

def student(name, age, *, city):
    print(name, age, city)

运行结果如下

命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错

函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了,如

def student(name, age, *args, city):
    print(name, age, args, city)

  

 

  

Python函数之简单总结的更多相关文章

  1. 『无为则无心』Python函数 — 28、Python函数的简单应用

    目录 1.函数嵌套调用 2.Python函数的简单应用 (1)打印线条 (2)函数计算 (3)打印图形 3.函数的说明文档 (1)函数的说明文档的作用 (2)函数说明文档的语法 (3)查看函数的说明文 ...

  2. python内置函数的简单使用和介绍

    """内置函数的简单使用和介绍参考链接:https://docs.python.org/3/library/functions.html ""&quo ...

  3. 【python笔记】Qt+云函数 实现简单的登录框制作

    [python笔记]Qt+云函数 实现简单的登录框制作 备注:前置条件:QtDesigner.pycharm.PyQt5.配置好的云函数(百度的叫函数计算CFC,用来充当一个简陋的服务器,主要是免费) ...

  4. python 函数之day3

    一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...

  5. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  6. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  7. Python开发【第四章】:Python函数剖析

    一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...

  8. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  9. python函数传参是传值还是传引用?

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

随机推荐

  1. ubuntu 下安装Angular2-cli脚手架

    一.首先需要安装node,npm. 请到nodejs官网进行下载并跟据提示进行安装 版本号中间偶数为稳定版本建议下载 https://nodejs.org/en/ node相关操作 https://n ...

  2. xmlplus 组件设计系列之零 - xmlplus 简介

    xmlplus 是什么 xmlplus 是博主写的一个 JavaScript 框架,用于快速开发前后端项目. xmlplus 基于组件设计,组件是基本的构造块.评价组件设计好坏的一个重要标准是封装度. ...

  3. 使用AF_INET实现点对点的通信示例

    作者:Younger Liu,本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. 1.    客户端(发送方) 操作流如下: (1) 使用AF_INET协议簇, ...

  4. 多说评论一次导回 Typecho 本地数据库

    一.追忆往昔 第一次接触社交化评论类产品大概是在2012年左右,当时国内知名度较高的有多说.友言等,国际上比较有名的有Disqus,这类产品的优点在此就不多说了. 用过几款产品后,被多说漂亮的页面和体 ...

  5. linux 内核的futex - requeue 以及 requeue-pi

    futex为更好支持pthread_cond的实现(,最主要是broadcast),设计了requeue功能,并以futex系统调用提供操作接口,包括一对配对的操作 futex_wait_requeu ...

  6. python基本语法-函数与异常

    # -*- coding: utf-8 -*- #自定义函数 ''' def functionname( parameters ): "函数_文档字符串" function_sui ...

  7. struts的package的name与namespace

    <struts> <constant name="struts.devMode" value="true"></constant& ...

  8. 简易RPC框架-学习使用

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  9. 【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); $.fn = { ready: function(callback){ // don ...

  10. o(n)线性排序算法

    O(n) 排序算法 前言 前面有总结过各类常用的排序算法,但是那些排序算法最优的时间复杂度是O(nlogn),所以我要介绍三种时间复杂度为O(n)的线性时间复杂度的排序算法. 计数排序 计数排序利用了 ...