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. python基础——操作系统简介

    不同应用领域的主流操作系统 l  桌面操作系统 l  服务器操作系统 l  嵌入式操作系统 l  移动设备操作系统 桌面操作系统 Windows系列 用户群体很大 MacOS 适合于开发人员 Linu ...

  2. 自动化测试基础篇--Selenium unittest简介

    一.什么是unittest unittest是Python单元测试框架,类似于JUnit框架. unittest中有4个重要的概念:test fixture, test case, test suit ...

  3. 初始HTML

    了解HTML 1.1       HTML的作用 HTML就是用来制作网页 1.2       什么是HTML HTML是英文HyperText Markup Language的首字母缩写,即超文本标 ...

  4. linux,强大的history命令

    如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT ...

  5. Java实例---黑白五子棋[单机版]

    程序分析 FiveChessFrame.java package com.ftl.frame; import java.awt.Color; import java.awt.Font; import ...

  6. 全网数据实时备份方案[inotify,sersync]

    环境搭建 0.环境安装   gcc  yum install gcc -y 1.安装inotify(源码软件包) 文件下载:https://files.cnblogs.com/files/ftl101 ...

  7. [EffectiveC++]item41:了解隐式接口和编译器多态

    classes和templates都支持接口和多态,interfaces and polymorphism 对classes而言接口是显示的explicit,以函数签名为中心.多态则是通过virtua ...

  8. c++计算器后续(5)

    自娱自乐: 大概是重新开始玩qt,然后MFC和第四步附加的作业大概不会去玩了.以上. QT相关: 阶段一: 原来作业里举了qt和mfc这两个做界面的东西,网上都说qt容易上手,学了mfc再来看qt简直 ...

  9. 7、Node.js EventEmitter

    #######################################################################################介绍Node.js Eve ...

  10. myeclipse调用loadrunner函数开发测试脚本

    myeclipse调用loadrunner函数开发测试脚本 一.使用myeclipse开发性能测试脚本 1.使用Eclipse新建一个Java工程,将目录%LoadRunner_Home%\class ...