一、什么是函数

  函数就是代码的一种组织形式,是指将一组语句的集合通过一个名字(函数名)封装起来,要想指向这个函数,只需要调用其函数名即可

  函数分为两大类:内置函数 和 自定义函数

二、为何要用函数

  减少重复代码

  使程序变的可扩展

  使程序变得易维护

三、如何用函数

1、原则:函数必须先定义,再调用

1)定义阶段:只检测语法,不执行函数体代码

2)调用阶段:会出发函数体代码的执行

2、定义函数的语法

  def 函数名(参数1, 参数2):

    """ 文档注释 """

    函数体

    return 返回值

3、调用函数的语法

  函数名(值1, 值2)

4、定义一个函数,只是定义的话不会执行

1)def是关键字,后跟一个空格
2)函数名,自己定义,起名需要遵循变量命名规则
3)后面括号和冒号不能省,括号内可以有参数
4)函数内所有代码缩进

5、函数定义的三种形式:

  有参函数:通过接受外部传进来的值,进行一系列的操作

  无参函数:只是进行函数内部的操作

  空函数:什么事情都不做,内部用pass进行占位

6、函数调用的三种形式:

  语句形式:仅仅是函数名加括号

  表达式形式:将函数的结果与数字类型(整型、浮点型)相计算

  当作参数传给另一个函数,例如:range(len("hello"))

四、函数的返回值

1、注意点:

  1)函数的返回值没有类型限制

  2)函数的返回值没有个数限制

2、返回多个值:多个返回值之间用逗号隔开,返回的是元组形式

3、返回一个值

4、返回零个值或者没有 return

return 除了有返回值的功能,还有函数结束执行的功能:函数内可以有多个return,但只要执行一次,整个函数就立即结束,并且将 return 后的值返回

五、函数的参数

1、形式参数:在定义函数阶段,括号内定义的参数称为形参

2、实际参数:在调用函数阶段,括号内传入的值称为实参

  在调用函数阶段会将实参的值传递给形参,这种传递关系只在调用函数时生效,在函数执行完后就会失效

3、位置参数

  1)站在形参角度(位置形参)

    定义:在函数定义阶段,按照从左到右的顺序依次定义的形参称之为位置形参

    特点:但凡按照位置定义的形参,必须被传值,多一个不行少一个也不行

def func(x, y, z):
print(x, y, z) func(1, 2) # 错误
func(1, 2, 3) # 正确
func(1, 2, 3, 4) # 错误

  2)站在实参角度(位置实参)

    定义:在调用阶段,按照从左到右的顺序依次传入的值称之为位置实参

    特点:与形参一一对应

def func(x, y, z):
print(x, y, z) func(2, 1, 3)

4、关键字参数(关键字形参)

定义:在调用阶段,按照 key=value 的形式定义的实参称之为关键字实参

特点:可以完全打乱顺序,但仍然能为指定的形参传值

def func(x, y, z):
print(x, y, z) func(x=1, y=2, z=3)
func(1, 2, 3)
func(z=3, y=2, x=1)

实参中位置参数与关键字参数可以混合使用,但是必须遵循以下原则:

1)位置参数必须放在关键字参数的前面

2)不能对同一个形参重复传值

def func(x, y, z):
print(x, y, z) func(1, z=3, y=2) # 正确
func(z=3, 1, y=2) # 错误
func(1, z=3, x=2, y=3) # 错误
func(x=1, y=2, 3) # 错误

5、默认参数(默认形参)

定义:在函数定义阶段,就已经为形参赋值,该形参称之为默认形参

特点:

  1)定义阶段就已经有值,意味着调用阶段可以不用传值

  2)位置形参必须放到默认形参的前面

  3)默认形参的值在函数定义阶段就已经固定了,定义阶段之后的改动不会影响该值

  4)默认形参的值通常应该是不可变类型

def func(x, y, z=100):
print(x, y, z) func(10, 20)
func(10, 20, 200)
def add_hobby(name, x, hobbies=[]):
hobbies.append(x)
print("%s 的爱好有 %s" %(name, hobbies)) add_hobby("qiu", "read")
add_hobby("xi", "eat")
add_hobby("qiuxi", "play") # 改进
def add_hobby(name, x, hobbies=None):
if hobbies is None:
hobbies = []
hobbies.append(x)
print("%s 的爱好有 %s" %(name, hobbies)) add_hobby("qiu", "read")
add_hobby("xi", "eat")
add_hobby("qiuxi", "play")

参数陷进 —— 默认参数是一个可变类型

6、可变长参数

定义:指的是在调用阶段,实参的个数是不固定的

实参无非两种方式(位置实参,关键字实参),对应的形参也必须有两种解决方案来分别接收溢出位置实参或关键字实参

其中:

  用 * 表示溢出的位置实参

  用 ** 表示溢出的关键字实参

1) 一个星号的用法

在形参前加一个星号:星号会将溢出的位置实参存成元组的形式,然后赋值给星号后的形参名

在实参前加一个星号:但凡碰到实参中带一个星号的,先将实参打散成位置实参再与形参做对应

2)两个星号的用法

在形参前加两个星号:星号会将溢出的关键字实参存成字典的形式,然后赋值给星号后的形参名

在实参前加两个星号:但凡碰到实参中带两个星号的,先将实参打散成关键字实参再与形参做对应

 7、命名关键字参数

定义:在定义函数时,* 与 ** 之间的参数称之为命名关键字参数

特点:在调用函数时,命名关键字参数必须按照 key=value 的形式传值

def func(x, *, y=1, z):
print(x)
print(y)
print(z) # func(1, 2, 3, 4, 5) # 错误
func(1, z=2) # 正确, 打印1 1 2
def func(a, b=2, *args, c, **kwargs):
print(a)
print(b)
print(args)
print(c)
print(kwargs) func(1, 7, 3, 4, c=5, name='qiuxi')
# 打印 1 7 (3, 4) 5 {'name': 'qiuxi'}

Learning-Python【10】:函数初识的更多相关文章

  1. 从入门到自闭之Python基础——函数初识

    1. 文件操作: 读操作: 格式:f = open("文件路径",mode = "r",encoding = "utf-8") f : 代表 ...

  2. 《Python》 函数初识

    一.函数: 1.函数初识: def 关键字 函数名 # def my_len() 函数名的命名规则跟变量一样,要具有描述性. 函数的优点: 减少代码的重复率 增强代码的阅读性 函数的主要目的:封装一个 ...

  3. Learning Python 010 函数 1

    Python 函数 1 调用函数 举个例子 多于Python内部的函数,你可以在Python的交互式终端中使用help()函数来查看函数的使用方法.比如:abs()函数,如果你不知道如何使用它,你可以 ...

  4. 9.Python初窥门径(函数初识)

    Python(函数初识) 一.初识函数 面向过程缺点 : 代码重复,代码描述性不高 函数 : 函数是以功能为导向,一个函数封装一个功能. 函数的优点 : 减少代码重复性,增强了代码的可读性 二.函数的 ...

  5. python之函数初识

    一.函数的初识1.如何定义函数:def 函数名(): 代码... 例如:def my_len(): l = [1, 2, 3, 4] count = 0 for i in l: count += 1 ...

  6. day08 python之函数初识

    一,什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print(),len( ...

  7. Learning Python 010 函数 2

    Python 函数 2 函数的参数 位置参数(普通,正常的参数) 随便编写一个求x^n的值的函数power(x, n): def power(x, n): s = 1 while n > 0: ...

  8. python笔记 函数初识

    1. 函数: 封装一个功能 def    my_len(形参):          ->  def  声明定义一个函数   my_len 函数名命名规则同变量 ······          - ...

  9. Python学习教程(learning Python)--2.3.3 Python函数型参详解

    本节讨论Python下函数型参的预设值问题. Python在设计函数时,可以给型参预设缺省值,当用户调用函数时可以不输入实参.如果用户不想使用缺省预设值则需要给型参一一赋值,可以给某些型参赋值或不按型 ...

  10. Python学习入门基础教程(learning Python)--2.3.3Python函数型参详解

    本节讨论Python下函数型参的预设值问题. Python在设计函数时,可以给型参预设缺省值,当用户调用函数时可以不输入实参.如果用户不想使用缺省预设值则需要给型参一一赋值,可以给某些型参赋值或不按型 ...

随机推荐

  1. 【Java线程安全】 — 常用数据结构及原理(未完结)

    本文主要记录自己对于多线程安全的学习,先来记几个线程安全模型. 首先最重要的当然是volatile和AQS了: 我们知道,整个java.cuncurrent包的核心就是volatile,CAS加自旋悲 ...

  2. solr下载安装

    原文查阅:https://www.cnblogs.com/cenwei/p/6527081.html 下载地址(版本众多):http://archive.apache.org/dist/lucene/ ...

  3. ajax里的status和readystate

    先看ajax封装函数 function ajaxFunc(method,url,data,callback) { var xhr; if (XMLHttpRequest) { xhr = new XM ...

  4. :after和:before 伪类

    1 使用伪类画三角形 .div{ margin-top: 100px; margin-left: 100px; } .div:after{ content: ''; display:inline-bl ...

  5. Spring Boot事务管理(下)

    在上两篇 Spring Boot事务管理(上)和Spring Boot事务管理(中)的基础上介绍注解@Transactional. 5 @Transactional属性 属性 类型 描述 value ...

  6. μCOS-II移植 - 基于CortexM3

    μCOS-II是一个经典的RTOS. 任务切换对于RTOS来说是最基本也是最核心的部分,除此之外还有任务调度算法. 先来看看基于stm32f107的任务切换代码: ;***************** ...

  7. java框架之Quartz-任务调度&整合Spring

    准备 介绍 定时任务,无论是互联网公司还是传统的软件行业都是必不可少的.Quartz,它是好多优秀的定时任务开源框架的基础,使用它,我们可以使用最简单基础的配置来轻松的使用定时任务. Quartz 是 ...

  8. js篇-解析url链接里面的参数名和参数值

    项目背景是,链接为:https://paladin.pingan.com.cn/jf/?appId=PA00200000000_01_APP&id=123456#/fundRank 要求拿到: ...

  9. Java 基础 IO

    一,前言 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据 ...

  10. Cocos Creator 加载和切换场景(官方文档摘录)

    Cocos Creator 加载和切换场景(官方文档摘录) 在 Cocos Creator 中,我们使用场景文件名( 可以不包含扩展名)来索引指代场景.并通过以下接口进行加载和切换操作: cc.dir ...