函数的简单概要

在使用上,函数在各大语言中的应用场景都大同小异(在一些语言当中,函数被称为方法,如oc),主要是为了提高代码的可维护性,python的函数语法也相对简洁,用关键字def来定义。重点在于参数的传递和引用,本文尽量不去讨论形参实参之类的概念,直接用代码对函数的使用做一些简单实例。

首先来看一下函数的定义和使用。python的函数可以自由选择是否有返回值,如果没有返回值则默认为null,并不会报错。python不支持前向引用,因此函数调用必须在函数实现以后,先看一下两个简单的python函数如下:

def simple_func():#定义一个名为simple_func的函数
    print("func test")#函数主体
simple_func()#调用函数

def simple_func_two():#定义函数
    return "func_two test"#函数的返回值
str = simple_func_two()#调用函数,并用一个变量接收函数的返回值
print(str)#打印变量
#输出结果如下#
#/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/penglong/Documents/python/s10/day3/func.py
#func test
#func_two test
#Process finished with exit code 0

在函数使用的时候,大多数是无法离开参数的,因为函数本身就是对数据或者事件进行处理。这个过程会大量涉及对象和变量等相关数据。因此参数是函数中相对比较重要的一点。python的参数可以分为三类,普通参数、默认参数、动态参数。其中动态参数又分为元组和字典两种形式。python属于弱语言,没有指定参数类型的机制,从可读性来说,这一点略坑。示例代码如下:

####普通参数#####
def argument_func(name,age,sex):#定义一个函数,它接收三个参数
    print("argument_func结果:\nname is:%s,age is:%s,sex is:%s"%(name,age,sex))#函数主体,输出带引用参数的内容
argument_func("lixin",24,"female")#调用函数,直接传入参数
####输出结果####
#argument_func结果:
#name is:lixin,age is:24,sex is:female对于普通参数,没什么值得特别注意的地方,包括类型,python会自动识别

##默认参数##
def static_argument_func(name,age,sex="female"):#定义函数,最后一个参数在定义函数的时候就赋值
    print("argument_func_two:结果:\nname is:%s,age is:%s,sex is:%s"%(name,age,sex))#函数主体
static_argument_func("lixin",24)#调用函数,注意我们只传了两个参数
####输出结果####
argument_func_two:结果:
name is:lixin,age is:24,sex is:female#仍然可以输出正确数值
"""关于默认参数要注意的是,默认参数只能放在最后的位置。在不传入的值得情况,默认参数使用其函数定义时候的值
如果传入,则使用传入的值"""

##多参数,以元组形式传值##
def lot_argument_func(*arg):#定义一个函数,接收多个参数
    print("lot_argument_func:结果:\nname is:%s,age is:%s,sex is:%s" %(arg[0],arg[1],arg[2]))
lot_argument_func("lixin",24,"female")#调用函数,第一种传值形式
#lot_argument_func(*("lixin",24,"female"))#调用函数,第二种传值形式,仅说明,代码被注释,无输出
####输出结果####
lot_argument_func:结果:
name is:lixin,age is:24,sex is:female
"""在多参数(元组型)接收时候,我们可以任意传入值且不用变量来接收值,函数默认会生成一个元组存放这些值,使用时
通过元组下标来获取数据,同时,我们也可以直接传入元组。需要注意的是下标不可越界"""

##多参数,以字典形式传值##
def lot_argument_func_two(**arg):
    print("lot_argument_func_two:结果:\nname is:%s,age is:%s,sex is:%s" % (arg["name"], arg["age"], arg["sex"]))
lot_argument_func_two(name="lixin",age = 24,sex ="female")#调用函数,第一种传值形式
# lot_argument_func_two(**{"name":"lixin","age":24,"sex":"female"})#调用函数
#第二种传值形式仅说明,代码被注释,无输出
####输出结果####
lot_argument_func_two:结果:
name is:lixin,age is:24,sex is:female
"""多参数(字典型)是对元组的补充,有时候我们可能需要对数据进行命名,那元组形式的参数就不能满足需求,
从而需要用到字典形式的传参方法。用法如图所示,函数默认生成字典,也可以直接传入字典。python3废
弃了has_key方法检测字典是否含有元素,转而使用if key in dict"""

  

  

  以上代码是对python函数传参形式一个基本概括。需要说明的是,只作为函数示例。在运用当中,无论是对元组的取值,还是对字典的运用都是极为不对的。对于元组而言,要防止下标越界。对于字典而言,应该先检测是否含有key,或者给出错误防御机制。在多参数的时候,其实我们也可以要求使用者传入必须参数,例如在函数中给一个判断,如果某参数不存在,则抛异常等。

匿名函数:

从使用上来讲,匿名函数用的相对较少,但在某些场景确实很方便,也让代码更为简洁。python的匿名函数也是用关键字定义,代码如下:

  

g = lambda x:x**3 #匿名函数 关键字lambda。后面是函数主体例如求x的3次幂
print(g(5))#调用函数,传入5。输出结果为125.
#以上例子看不太出匿名函数的好处,下面给个实例
print(list(map(lambda x:x**2,range(10))))#map例子 python3之后map函数必须要使用list接收
输出结果如下:
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Process finished with exit code 0
"""如上,当函数极为简短,比如单纯处理一下数据或者简单字符串且
只使用一次的时候,我们无需特意去定义一个函数而直接可以用一行
代码完成需求。这就是匿名函数"""

  

  以上大致是python函数的基础内容,只有基本使用方法,python中也有闭包的概念,可以在函数的参数中传入一个函数,本文并未做实例。大多数功能,还需要在实践中摸索。

  

  

  

  

  

时间: 2024-12-29 14:28:46

函数的简单概要的相关文章

C++函数指针简单使用

函数指针: 函数指针必须包含要调用的函数的内存地址,为了工作正确,指针还必须包含其他信息,即指针所指向的函数的参数列表中的参数类型以及返回类型.因此,在声明函数指针时,必须指定该指针可以指向的函数的参数类型和返回类型,以及指针名. 函数指针的一般形式如下: 返回类型(*指针明名)(参数类型列表); 注意:指针名上的括号是必不可少的,否则*就会与返回类型结合,就成了一个函数原型了. 示例: #include <iostream> using std::cout; using std::endl;

(hdu step 7.2.2)GCD Again(欧拉函数的简单应用——求[1,n)中与n不互质的元素的个数)

题目: GCD Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 125 Accepted Submission(s): 84   Problem Description Do you have spent some time to think and try to solve those unsolved problem afte

字符编码知识简介和iconv函数的简单使用

字符编码知识简介和iconv函数的简单使用 字符编码知识简介 我们知道,在计算机的世界其实只有0和1.期初计算机主要用于科学计算,而我们知道一个数,除了用我们常用对10进制表示,也可以用2进制表示,所以只有0和1就可以进行科学计算,但是为了便于计算,大神们还是向计算机中引入的编码,比如通常我们用补码表示一个负数.所以编码这个东西,是从一开始就伴随着计算机的.到现在,我们的生活已经完全离不开计算机了,计算机也不仅仅用于科学计算了,更多地应用系信息处理.那计算机怎样表示与我们生活息息相关的事物呢,一

管道函数(%&gt;%)很简单

%>%来自dplyr包的管道函数,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以大量减少内存中的对象,节省内存 %>%,该符号将左边的对象作为第一个参数传递到右边的函数中 直接上栗子??:library(data.table) library(tidyr) # 先虚构一数据框 set.seed(1) date <- as.Date('2016-11-01') + 0:14 hour <- sample(1:24, 15) min <- sampl

$.extend()和$.fn.extend()函数用法简单介绍

$.extend()和$.fn.extend()函数用法简单介绍:标题中的两个方法在jQuery插件开发中非常的重要,下面通过简单的代码实例介绍一下它们的用法.本章节不会介绍它的原理,而是只给出它们的作用是什么,能够做什么事情.jQuery.extend()可以为jQuery类添加新的方法,类似于c#或者java中的静态方法.jQuery.fn.extend()可以为jQuery的对象实例添加新的方法.代码实例: <!DOCTYPE html> <html> <head>

ffplay.c函数结构简单分析(绘图)

近期重温了一下FFplay的源码. FFplay是FFmpeg项目提供的播放器演示样例.虽然FFplay不过一个简单的播放器演示样例,它的源码的量也是不少的. 之前看代码,主要是集中于某一个"点"进行研究,而没有从整体结构上进行分析.本文就打算弥补之前学习的不足,从整体结构上分析一下FFplay的源码,绘图理一下它的结构.当中还有诸多不足.以后有机会慢慢完好.说明一下自己画的结构图的规则:图中仅画出了比較重要的函数之间的调用关系. 粉红色的函数是FFmpeg编解码类库(libavcod

【JavaScript】使用setInterval()函数作简单的轮询操作

轮询(Polling)是一种CPU决策怎样提供周边设备服务的方式,又称"程控输出入"(Programmed I/O). 轮询法的概念是.由CPU定时发出询问.依序询问每个周边设备是否须要其服务,有即给予服务,服务结束后再问下一个周边,接着不断周而复始. 轮询法实作easy.但效率偏低. 在JavaScript使用setInterval函数作简单的轮询操作,能够随时判定某一个參数值,但不用刷新页面.即不用在页头增加<META HTTP-EQUIV="Refresh&quo

Swift学习之函数和简单地控件的创建

 今天还是重复昨天做的事情--敲代码,但唯一的不同就是所学的知识不同了,我们又进一步往深得层次学习了,感觉越来越有意思了,虽然临近结束了看着大家积极性越来越低了,但是我知道我不能这样,我要比别人付出的更多,更加的踏实才行,因为我知道我的基础不如别人,目标和动力也和他们不同,看着大家有的说是只要找到工作就好,还有的说只要每个月够花就好,担着真的是大家来这里学习的最终目的吗,如果是这样,真的还不如随便找个工作将就一下,也比这个整天做到这好多了,还交了那么贵得费用,所以何必呢,既然选择了这条路,既然当

【C++】纯虚函数的简单应用。

//纯虚函数的简单应用. #include<iostream> using namespace std; class A { public: virtual void Eat() = 0; virtual void Sleep() = 0; virtual void Foot() = 0; }; class P : public A { public: void Eat() { cout<<"P::Eat()"<<endl; } void Sleep