函数的定义

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. 解决CentOS虚拟机克隆后无法上网(网卡信息不一致)的问题

    一.问题描述 虚拟机克隆后,由于网卡信息不一致的问题,导致不能上网或者执行"sercice network restart"命令失败 [root@lyy 桌面]# ifconfig ...

  2. C++ STL学习之容器set和multiset (补充材料)

    一.set和multiset基础 set和multiset会根据特定的排序准则,自动将元素进行排序.不同的是后者允许元素重复而前者不允许. 需要包含头文件: #include <set> ...

  3. OpenCV 玩九宫格数独(二):knn 数字识别

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:刘潇龙 前言 首先需要说明,这里所说的数字识别不是手写数字识别! 但凡对机器学习有所了解的人,相信看到数 ...

  4. Python 基础 一

    Python 基础  一 一.关于Python的介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum),这一两年在国内很流行,应用很广泛. 二.Python的基础知识(1) 1 ...

  5. openresty源码剖析——lua代码的加载

    ##Openresty是什么 OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,通过把lua嵌入到Nginx中,使得我们可以用轻巧的lua语言进行nginx的相关开发,处理 ...

  6. hdu2389二分图之Hopcroft Karp算法

    You're giving a party in the garden of your villa by the sea. The party is a huge success, and every ...

  7. [刷题]算法竞赛入门经典(第2版) 4-7/UVa509 - RAID!

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa509 - RAID! #include<iostream> ...

  8. CVE-2014-0038内核漏洞原理与本地提权利用代码实现分析 作者:seteuid0

    关键字:CVE-2014-0038,内核漏洞,POC,利用代码,本地提权,提权,exploit,cve analysis, privilege escalation, cve, kernel vuln ...

  9. (jquery+ajax)省市区三级联动(封装和不封装两种方式)-----2017-05-14

    首先,要实现如下图效果, 1.要理清思路: 先做出三个下拉菜单----根据第一个下拉菜单的value值获取第二个下拉列表的内容,第三个同理. 2.用到的数据库表:Chinastates表 规律:根据国 ...

  10. 谈谈我的session跨域处理方法

    情景:公司的一个网站有一个模块(测试模块)需要单独用另外的一个域名(www.btest.com)去访问,即网站需要用两个不同的域名去访问,如首页(www.abc.com)和测试模块(www.xyz.c ...