1. 函数的定义及调用

函数:所谓的函数可以看作是对一段代码的封装,也是对一个功能模块的封装,这样方便在下次想用这个功能的时候直接调用这个功能模块,而不用重新去写。

  • 函数的定义:我们使用def关键字来定义函数,定义函数的语法为
def 变量名():
函数体

这⾥的函数名的命名规则和使⽤和变量基本⼀样.⾃⼰回顾⼀下变量的命名规则.

函数体: 就是函数被执⾏之后要执⾏的代码

我们来定义⼀个约x功能:

def yue():
print("拿出⼿机")
print("打开陌陌")
print("找个漂亮的妹⼦")
print("问她, 约不约啊?")
print("oK. ⾛你!")

哦了定义完了. 但是这个时候去执⾏. 会发现什么都没有发⽣. 因为我只定义了⼀个函数. 但是还没有执⾏过这个函数.

  • 函数的调⽤: 使⽤函数名可以调⽤函数, 写法: 函数名(), 这个时候函数的函数体会被执⾏
# 调⽤yue()函数
yue()

结果:

拿出⼿机
打开陌陌
找个漂亮的妹⼦
问她, 约不约啊?
oK. ⾛你!

看⼀下执⾏过程:



终于可以约了. 如果我还想约呢? 多次调⽤就可以了. 很⽅便.

2. 函数的返回值

从上面的结果分析,我们已经定义了一个函数并且可以正常执行;但是我们发现并没有返回值,好像程序执行结束后除了执行过程中打印的信息外,我们并不知道执行的结果;其实,函数执行完之后是由默认的返回值None的。

要指定返回的话要使用return关键字,返回指定的结果:

def yue():
print("约你")
print("约我")
print("约他")
return "美⼥⼀枚"
girl = yue()
print(girl) # 美⼥⼀枚

return也可以返回多个值:

def yue():
print("约你")
print("约我")
print("约他")
return "美⼥⼀枚", "萝莉一枚"
girl = yue()
print(type(girl)) # tuple

关于返回值及return可以总结如下:

  • 函数在执行过程中一遇到return就会终止函数的执行
  • return可以指定返回的数据,默认为None
    • 如果只写return,或者不写return,默认返回None
    • 如果后面写了一个返回值,那么调用者(函数的返回值都是返回给调用者)可以接收一个参数
    • 如果后面写了多个返回值,那么调用者接收的是一个元组(可以直接结构成多个变量)

3. 函数的参数

这里有几个定义必须要清楚:

  • 实参:在函数调用的时候要传递给函数的值,表示函数执行时使用的所需要的信息
  • 形参:在函数定义的时候小括号里的的参数,表示这个函数需要这个参数
  • 传参:表示将实参传递给形参的过程
(1)从实参的角度来看:

位置参数

python传参的时候如果没有以关键字形式a=xxx传递变量,默认时按位置顺序传参的:

def func1(x, y):
print(x, y) func1(10, 100) # 打印 10, 100
func1(100, 10) # 打印 100, 10,默认都按照位置参数来传参

y else y
# 结果:
compare(1, 2) # 2
compare(3, 2) # 3
``` -->

可以看出实参的第一个参数时对应第一个形参的,第二个也是如此

关键字参数

def func1(name, age):
print('my name is {}, and i\'m {} years old'.format(name, age))
func1('zzc', 26)
# my name is zzc, and i'm 26 years old
def func1(name, age):
print('my name is {}, and i\'m {} years old'.format(name, age))
func1(age=26, name='zzc') # 使用关键词传参时,参数的顺序可以变动
# my name is zzc, and i'm 26 years old

混合参数

In [5]: def func3(name, age, gender):
...: print(name, age, gender) In [6]: func3('zzc', age=26, gender='男') # 位置参数和关键字参数混合使用时也可以正常传参
zzc 26 男 In [7]: func3('zzc', age=26, '男')
File "<ipython-input-7-b2db6ff0cc98>", line 1
func3('zzc', age=26, '男') # 混合是使用时要把关键词放在后面,不然会报错
^
SyntaxError: positional argument follows keyword argument In [8]:

综上: 在实参的⾓度来看. 分为三种:

  1. 位置参数
  2. 关键字参数
  3. 混合参数, 位置参数必须在关键字参数前⾯
(2)从形参的角度来看:

位置参数

按照位置来赋值,跟形参的,以上写的都是位置参数的形式:

默认值参数

在函数声明的时候, 就可以给出函数参数的默认值. 在调⽤的时候可以给出具体的值, 也可以不给值, 使⽤默认值.

In [9]: def func4(name, age, gender='男'):
...: print(name, age, gender) In [10]: func4('zzc', 26) # 此时调用时没用传递gender参数就为默认值‘男’
zzc 26 男 In [11]: def func4(name, gender='男', age): # 使用默认值参数时一定要放在位置参数后面,否则会报错
...: print(name, age, gender)
File "<ipython-input-11-e56aafc5908d>", line 1
def func4(name, gender='男', age):
^
SyntaxError: non-default argument follows default argument In [12]:

综上: 在形参的⾓度来看,

  1. 位置参数
  2. 默认值参数(⼤多数传进来的参数都是⼀样的,⼀般⽤默认参数)

python学习笔记:第9天 函数初步的更多相关文章

  1. Python学习笔记014——迭代工具函数 内置函数enumerate()

    1 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 2 语法 enumerate(sequ ...

  2. python学习笔记十——模块与函数

    第五章 模块与函数 5.1 python程序的结构 函数+类->模块              模块+模块->包                 函数+类+模块+包=Python pyth ...

  3. Python学习笔记(九)—— 函数

    一.函数调用: 1.python内部函数查询:http://docs.python.org/3/library/functions.html#abs 2.注意调用函数的参数个数和类型. 3.函数名其实 ...

  4. python学习笔记之迭代器和函数(第三天)

    一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ####### ...

  5. python学习笔记二:(python3 logging函数中format说明)

    背景,在学习logging时总是遇到无法理解的问题,总结,尝试一下更清晰明了了,让我们开始吧! logging模块常用format格式说明 %(levelno)s: 打印日志级别的数值 %(level ...

  6. Python学习笔记-Day3-python内置函数

    python内置函数 1.abs    求绝对值 2.all 判断迭代器中的所有数据是否都为true 如果可迭代的数据的所有数据都为true或可迭代的数据为空,返回True.否则返回False 3.a ...

  7. Python学习笔记2—内置函数

    函数的使用 官方文档:https://docs.python.org/2/library/functions.html

  8. python学习笔记(六)- 函数、文件json与python字典互操作

    1.函数:(方法.功能) 1.提高代码的复用性 2.让代码更简洁.简化代码 1)定义一个简单的函数 def sayHello(): #函数名,定义函数 print("hello") ...

  9. [Python学习笔记-001] 内置函数getattr()

    如果某个实例foo有多个方法, 当对foo的每一个方法我们都需要使用try ... except ...进行包装的时候,内置函数getattr()可以用来精简代码. 1. getattr()的用法 # ...

  10. Python学习笔记系列——高阶函数(filter/sorted)

    一.filter #filter()函数用于过滤序列.和map()类似,也接收一个函数和一个序列,把函数依次作用于每个元素,根据返回值是True还是False决定是否保留该元素. #filter()函 ...

随机推荐

  1. 关于CSS中的元素定位

    ---恢复内容开始--- CSS 定位和浮动 CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务. 定 ...

  2. 5 hbase-shell + hbase的java api

    本博文的主要内容有 .HBase的单机模式(1节点)安装 .HBase的单机模式(1节点)的启动 .HBase的伪分布模式(1节点)安装  .HBase的伪分布模式(1节点)的启动    .HBase ...

  3. Java自学之路(新手一定要看)

    Java自学之路(新手一定要看) 转自尚学堂 JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游 ...

  4. JVM垃圾收集算法的选择

    1. 介绍 JVM提供了多种垃圾收集器,应该根据应用选择一种合适的垃圾收集器. 垃圾回收管理内存通过如下操作: 在年轻代分配对象,把年龄大的对象晋升到老年代. 当年老代超过阈值的时候,并发标记收集. ...

  5. css根据屏幕大小切换样式

    首先html head之间加入: <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, ma ...

  6. PostgreSQL 连接问题 FATAL: no pg_hba.conf entry for host

    The server doesn't grant access to the database: the server reports FATAL: no pg_hba.conf entry for ...

  7. mongd配置文件解释

    mongd配置文件解释 系统日志配置 systemLog: verbosity: <int> quiet: <boolean> traceAllExceptions: < ...

  8. PHP------TP命名空间

    命名空间: 相当于一个虚拟的目录 正常管理文件使用文件夹--物理区分 TP框架的初始命名空间是:ThinkPHP\Library 在TP框架下命名空间里面使用\代表的是初始命名空间(ThinkPHP\ ...

  9. fastjson反序列化TemplatesImpl

    环境参考第一个链接,直接用IDEA打开 编译EvilObject.java成EvilObject.class 先看poc,其中NASTY_CLASS为TemplatesImpl类,evilCode是E ...

  10. Java特性之继承的应用

    继承是为了复用,复用是为了减少冗余的代码,提高开发效率. 这次我讲继承,仅仅只是讲它在我开发中一个小小的应用,就是关于Controller日志打印.我们通常使用日志,要么是使用slf或者是log4j. ...