函数其实一段带名字的代码段,我们可以根据代码段,重复执行某一段代码段,或者有条件的执行某一段代码段。

将一段代码定义成函数后,我们可以很方便的根据自己的需求,随时调用该代码段。遇到需求变化的时候,只需要修改该函数,就可以满足需求,不需要到处修改特定的代码。

比如我们定义一个print hello的函数:

def say_hello():
print("Hello!") say_hello()
'''
Hello!
'''

我们可以看到,我们使用def来定义函数, 以冒号结尾。 输入回车后,ide会自动缩进,缩进后的代码就是函数的定义体。定义完函数体后,我们通常空一行表示定义完函数。

我们直接输入函数名,即可调用函数。

我们还可以向函数传递“消息”,在编程语言中我们称之为参数。比如我们修改函数,可以向其传递一个人名,并输出想要语句。

def say_hello(name):
print(name + ", Hello!") say_hello('Ralf')
'''
Ralf, Hello!
'''

通过上面代码,我们可以看到,我们重新修改了函数,增加了一个参数 name, 修改了函数体。这样我们可以根据自己的需要,向函数传递消息,并输出想要的结果。

函数定义中的参数,我们通常称之为 形参,比如上述例子中的变量name, 这个变量只在函数定义中使用,并不具有实际的值。我们在调用函数时,传递的消息或者说变量,我们称之为实参,是我们“实际“上想要使用的参数或者数值,变量。

通常情况下,我们必须按照事先定义好的参数,依次传递给函数体,才能正确得出想要的结果。

def say_hello(name, city):
print(name + ", Welcome to " + city + "!" ) say_hello('Ralf', "Shanghai")
'''
Ralf, Welcome to Shanghai!
'''
def say_hello(name, city):
print(name + ", Welcome to " + city + "!" ) say_hello('Shanghai', "Ralf")
'''
Shanghai, Welcome to Ralf!
'''
def say_hello(name, city):
print(name + ", Welcome to " + city + "!" ) say_hello('Ralf')
'''
Traceback (most recent call last):
File "D:/PythonStudy/test.py", line 31, in <module>
say_hello('Ralf')
TypeError: say_hello() missing 1 required positional argument: 'city'
'''

我们可以使用关键字的形式来规避上面例子中出现的错误,即在调用函数时,使用 形参 = value的方式来调用函数:

def say_hello(name, city):
print(name + ", Welcome to " + city + "!" ) say_hello(city = "Shanghai", name = 'Ralf')
'''
输出:
Ralf, Welcome to Shanghai!
'''

在定义函数时,我们也可以定义一些参数默认值,这样在调用,如果给了实参,函数就使用实参,没有给值,就是用默认值。

def say_hello(name, city = "Shanghai"):
print(name + ", Welcome to " + city + "!" ) # 使用默认值
say_hello("Ralf") #使用实际值
say_hello("Rachel", "Beijing")
'''
输出:
Ralf, Welcome to Shanghai!
Rachel, Welcome to Beijing!
'''

返回值:

函数不仅可以接受外部传送的变量参数,也可以输出一个返回值给调用者。

def say_hello(name, city = "Shanghai"):
return name + ", Welcome to " + city + "!" out_message = say_hello("Rachel", "Beijing")
print(out_message) '''
输出:
Rachel, Welcome to Beijing!
'''

返回一个列表:

def born_city(name, city = "Shanghai"):
return [name, city] out_message = born_city("Rachel", "Beijing")
print(type(out_message))
print(out_message) '''
输出:
<class 'list'>
['Rachel', 'Beijing']
'''

返回一个字典:

def born_city(name, city = "Shanghai"):
return {'name': name, 'city': city} out_message = born_city("Rachel", "Beijing")
print(type(out_message))
print(out_message) '''
输出:
<class 'dict'>
{'name': 'Rachel', 'city': 'Beijing'}
'''

传递任意数量的实参,有时候我们不确定,实际参数有几个,可以能是一个也可能是多个,要怎么定义哪。我们可以在形参前面加一个星号,表示这个参数可以是多个:

def say_hello(*names):
print(names) out_message = say_hello("Rachel", "Ralf", "Terry")
print(out_message) '''
输出:
('Rachel', 'Ralf', 'Terry')
'''

注意函数返回了一个元组,即便函数只输入一个参数,返回的也是一个元组。

结合实参和任意数量的实参:

def say_hello(words, *names):
for name in names:
print(words + ", " + name) out_message = say_hello("hello", "Rachel", "Ralf", "Terry")
print(out_message) '''
输出:
hello, Rachel
hello, Ralf
hello, Terry
'''

使用任意数量的关键字实参。有时候我们需要接受任意数量的实参,但是不知传递给函数的会是什么样的信息。在这种情况下,我们可以将函数编写成接受任意数量的 键值对,即字典的形式。方式为加两个冒号 **dict:

def pepole_info(name, sex, **others):
print(name + ": "+ sex )
for key, value in others.items():
print(key + ": " + value) out_message = pepole_info("Ralf", "male", height = "", hobby = "football")
print(out_message) '''
输出:
Ralf: male
height: 175
hobby: football
'''

Python 学习笔记10 函数的更多相关文章

  1. Python学习笔记之函数

    这篇文章介绍有关 Python 函数中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中函数的使用技巧 1.函数文档 给函数添加注释,可以在 def 语句后面添加独立字符串,这样的注释被 ...

  2. 小甲鱼:Python学习笔记003_函数

    >>> # 函数>>> def myFirstFunction(params1,params2...): print("这是我的第一个函数!") ...

  3. Python学习笔记 - day6 - 函数

    函数 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多次执行(这叫函数的调用).函数在编程语言中有基本分为:预 ...

  4. python学习笔记10(函数一): 函数使用、调用、返回值

    一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明和函数定义可以出现在不同的文件中,比如C语言),但是在Python中,函数声明和函数定义是视为一体的.在Py ...

  5. python 学习笔记 10 -- 正則表達式

    零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...

  6. Python学习笔记系列——函数

    今年下半年的计划主要是Python和Mysql了,公司不方便看书和视频,就照着廖雪峰的Python网站开始看了.以下纯为个人笔记记录,若是想系统学习的小伙伴还是看这里的好一些,毕竟系统.https:/ ...

  7. Python学习笔记(五)函数和代码复用

    函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...

  8. python学习笔记(4)--函数

    1.函数 函数是指将一组语句的集合通过一个名字封装起来.要想执行这个函数,只需调用其函数名即可. 函数的特性: 1.减少重复代码 2.使程序变的课扩展 3.使程序变得易维护 语法定义: def pri ...

  9. python学习笔记10(Python的内存管理)

      用这张图激励一下自己,身边也就只有一位全栈数据工程师!!! 32. Python的内存管理 1. 对象的内存使用 对于整型和短字符串对象,一般内存中只有一个存储,多次引用.其他的长字符串和其他对象 ...

随机推荐

  1. Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC

    解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF ...

  2. Spring Cloud 2-Feign 声明式服务调用(三)

    Spring Cloud Feign  1. pom.xml 2. application.yml 3. Application.java 4. Client.java 简化RestTemplate调 ...

  3. 使用 gcc 编译 libvmaf-1.3.9 时的 注意事项

    vmaf-1.3.9\wrapper\Makefile 首行添加 CXX = g++CC = gcccc = gcc CFLAGS_COMMON 行尾追加 -msse4.1 CFLAGS_COMMON ...

  4. Python爬虫基础之认识爬虫

    一.前言 爬虫Spider什么的,老早就听别人说过,感觉挺高大上的东西,爬网页,爬链接~~~dos黑屏的数据刷刷刷不断地往上冒,看着就爽,漂亮的校花照片,音乐网站的歌曲,笑话.段子应有尽有,全部都过来 ...

  5. iOS开发之用到的几种锁整理

    1. iOS中的互斥锁 在编程中,引入对象互斥锁的概念,来保证共享数据操作的完整性.每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问对象. 1.1 @sync ...

  6. query string parameters 、 Form Data 、 Request Payload

    微信小程序ajax向后台传递参数的时候总是报400错误 然后看了一下network 发现是query string parameters,但是我写的header如下 header:{ "Co ...

  7. Jrebel最新激活破解方式以及一些必要的配置支持

    启动内存配置 jrebel用diea打开的时候,有时需要手动的配置一下jvm内存,项目才能正常启动: 如 VM Options: -Xms256m -Xmx700m -XX:MaxPermSize=2 ...

  8. + CategoryInfo : NotSpecified: (:) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException

    File C:\Users\danv\Documents\WindowsPowerShell\profile.ps1 cannot be loaded because the execution of ...

  9. NOIP2011 D2T3 观光公交 做题笔记

    目录 归纳题目的性质 算法 60分 100分 code 大家来找茬 总结 归纳题目的性质 每一个加速器效果相同(1) 车子等到所有人上车之后才会发车, 这个最早发车时间不由加速器的配比决定(2) 要优 ...

  10. NEO智能合约开发(一)不可能完成的任务

    悬赏任务 兹有如下合约 public static object Main(string method, object[] args) { if (Runtime.Trigger == Trigger ...