热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于python:Python7函数上

在任何编程语言中,函数的作用都是雷同的,它能够将一些须要反复执行的语句组合起来,不便在须要的时候调用他们,python中应用def关键字来创立一个函数,请看上面的实例:
引言

这篇文章介绍python中函数的基本知识。

文章目录

0×1.自定义函数
0×2.给函数增加文档阐明
0×3.函数的作用域
0×4.带参数的函数

0×1.自定义函数

在任何编程语言中,函数的作用都是雷同的,它能够将一些须要反复执行的语句组合起来,不便在须要的时候调用他们,python中应用def关键字来创立一个函数,请看上面的实例:

#!/usr/bin/env python3
#coding=utf-8
dect={"one":1,"two":2,"three":3}

#创立函数,函数名为in_dect,中括号中为空代表不接管传入参数,函数执行过程中遇到return会完结执行,将return后的值返回给调用者
#------
def in_dect():
    """依据字典传入键返回值"""
    try:
        count=dect[num]
    except KeyError as err:
        count=0
    return count
#------

#将num设置成dect字典中不同的键,在print中调用方才创立的函数,in_dect()函数会依据num键返回对应的值,如果传入的键不存在,则触发KeyError异样,返回0
num="one"
print(in_dect())
num="two"
print(in_dect())
num="xxx"
print(in_dect())

#程序输入
1
2
0

0×2.给函数增加文档阐明

咱们能够应用”三引号”给每个函数增加一段性能阐明,在python中,通过”函数名.__doc__”可能打印出这段阐明文字,请看上面的实例:

#!/usr/bin/env python3
#coding=utf-8

#------
def sayhello():
    """打印出hello world"""
    """www.qingsword.com"""
    print("hello world!")
#------

sayhello()  #间接调用函数
print(sayhello.__doc__) #打印出函数中的阐明信息

#程序输入
hello world!
打印出hello world

#留神下面的输入,__doc__只可能打印出函数中第一个"三引号"所蕴含的阐明信息

0×3.函数的作用域

函数中的变量名称和全局中的变量名称能够雷同,函数的变量名称只作用与函数外部,请看上面的实例:

#!/usr/bin/env python3
#coding=utf-8

#------
def re_list():
    lst=[1,2,3]
    return lst
#------

lst=["a","b","c"]
print(lst,re_list())

#在下面的程序中,re_list()函数中蕴含了一个变量名称lst,全局中也有一个雷同名称的变量,但两者互不烦扰,函数中的变量的作用域仅限函数自身,当函数被调用时创立,函数执行实现后被回收,上面是程序输入
['a', 'b', 'c'] [1, 2, 3]

0×4.带参数的函数

能够在自定义的函数括号中定义变量来接管传入数据,请看上面的实例:

#!/usr/bin/env python3
#coding=utf-8

#------
def re_dect_value(dect,k):
    return dect[k]
#------

d={"a":1,"b":2,"c":3}
k="a"

#调用函数时,将d和k传递给函数,函数定义时,括号中蕴含了两个参数,这相当于将函数参数中的dect指向了d所援用的内存区域的数据(列表数据),k同理,所以这个函数的return语句返回的值,实际上就等价与d[k]
print(re_dect_value(d,k))

#程序输入:
1

能够应用判断语句来判断传递给函数的参数的数据类型,通过数据类型判断调用不同的函数区块执行,如果不携带参数,则应用默认值所指向的区块执行,请看上面的实例:

#!/usr/bin/env python3
#coding=utf-8

#choose_def函数,用于确定传入的数据是哪种类型,依据不同类型调用不同函数执行,如果不传入参数,则应用默认值(即typ="default",idx=0)
def choose_def(typ="default",idx=0):
    if type(typ)==type([]):
        print(c_dect(typ,idx))
    elif type(typ)==type(""):
        print(c_str(typ,idx))
#------
def c_dect(d,idx):
    return d[idx]
#------
def c_str(s,idx):
    return s[idx]
#------

lst=[1,2,3,4]
s="www.qingsword.com"
i=2
choose_def(lst,i)
choose_def(s,i)
choose_def()

#程序输入
3
w
d

#在下面的程序中,最初一次调用选择函数时没有携带参数,python会应用定义函数时设定的默认值(如果有),程序判断出"default"是一个字符串,所以调用字符串函数c_str(),因为默认的idx是0,所以打印出"default"第一个字符d

#像choose_def()这种携带默认值参数的函数,如果咱们只想批改其中一个参数,其余的参数依照默认值,能够应用上面的办法调用
choose_def(idx=3)
#这样的调用办法仅指定了idx的值,typ并没有设定,它将应用默认值

除了应用类型判断外,还能够应用字符串判断,通过每个类型判断所返回的字符串,来判断传入的参数属于那种类型,对下面的程序中的choose_def函数做出一点点批改,执行后果雷同:

#将type()判断后返回的值转化成字符串,与对应的字符串值比拟
def choose_def(typ="default",idx=0):
    if str(type(typ))=="":
        print(c_dect(typ,idx))
    elif str(type(typ))=="":
        print(c_str(typ,idx))

当传递了一个谬误的数据给函数时,除了应用try捕捉异样外,还可能应用raise关键字来被动抛出异样,批改choose_def()函数,在开端增加上面的语句:

def choose_def(typ="default",idx=0):
    if str(type(typ))=="":
        print(c_dect(typ,idx))
    elif str(type(typ))=="":
        print(c_str(typ,idx))
    else:
        raise TypeError("谬误的参数:%s"%typ)

#向函数传递一个谬误的参数,整数
choose_def(123)

#当程序执行if判断时发现没有类型可能匹配传入的整型,所以跳转到else执行上面的raise语句,当raise语句被执行时,会立即终止程序的执行,并抛出一个异样,这个异样是咱们被动抛出的,上面是这个异样的显示信息,其中的中文内容是咱们自定义的

builtins.TypeError: 谬误的参数:123

再来看一个实例,创立一个函数,承受两个数值,返回这两个数值相加后的后果:

#!/usr/bin/env python3
#coding=utf-8

#------如果输出的字符不是数值,if判断会匹配到else从而被动抛出一个异样
def a_plus(x,y):
    """返回x+y的值"""
    if is_Num(x) and is_Num(y):
        return float(x)+float(y)
    else:
        raise TypeError("输出的数值谬误:%s,%s"%(x,y))

#------用来判断输出的是否为数值数据,不论是浮点数,整数或迷信计数法,应用float()转换时都不会报错,而其余的字符就会引发ValueError异样返回False,如果不报错,返回True
def is_Num(x):
    """判断键盘输入的是否为数字"""
    try:
        float(x)
    except ValueError:
        return False
    else:
        return True
#------
     
x=input("第一个数:")
y=input("第二个数:")
print("相加后果:%.2f"%a_plus(x, y))

#程序输入
第一个数:1.2
第二个数:1.3333
相加后果:2.53

第一个数:abc
第二个数:111
builtins.TypeError: 输出的数值谬误:abc,111

除了可能返回单个值外,函数还能一次返回多个值,在返回多个值的时候,这些值实际上是以元组的模式返回的,例如:

#!/usr/bin/env python3
def my_def(x,y,z):
    """返回多个值的函数"""
    return x,y,z

#能够应用一个变量承受这些返回值,实际上x就指向了一个元组
x=my_def(1,2,3)
print(x)

#也能够用多个变量别离指向元组中的单个元素
a,b,c=my_def(1,2,3)
print(a)
print(b)
print(c)

#程序输入
(1, 2, 3)
1
2
3

Ps:可能有点敌人会问,那么如果函数没有return语句呢?在没有return语句的函数执行实现后,返回一个None。

最初给出一个二元一次方程组求解的实例:

#!/usr/bin/env python3
#coding=utf-8

import math

def quadratic(a,b,c):
    """二元一次方程组公式法求解"""
    #当传入的为一个非数值数据时,能够应用异样捕捉try,或上面的办法抛出异样
    if not isinstance(a,(int,float)) or not isinstance(b,(int,float)) or not isinstance(c,(int,float)):
        raise TypeError("谬误的参数传入,a,b,c只能是整数或小数:%s,%s,%s"%(a,b,c))
    #求出判别式
    disc=b**2-4*a*c
    #判别式的三种状况
    if disc<0:
        return "方程无解"
    elif disc==0:
        return "方程有惟一解:"+str(-b/2*a)
    else:
        #math模块的sqrt()函数用于开方
        result1=(-b+math.sqrt(disc))/2*a
        result2=(-b-math.sqrt(disc))/2*a
        return "方程两个解别离为:%s,%s"%(str(result1),str(result2))
         
print(quadratic(4,8,4))
print(quadratic(2,6,4))
print(quadratic(2,3,3))

#程序输入
方程有惟一解:-16
方程两个解别离为:-4.0,-8.0
方程无解

#如果输出一个谬误的值,就会抛出错误信息
print(quadratic("a",3,3))
TypeError: 谬误的参数传入,a,b,c只能是整数或小数:a,3,3

推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
author-avatar
111222
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有