一、函数的作用:

提高代码的可读性,减少代码的冗余,方便调用和修改,组织结构清晰

二、函数的定义:函数遵循先定义后调用的原则

1、无参函数

def funcname():   #def 是关键字,后跟函数名():
子代码 #函数要执行的代码
return #return返回值,没有时默认为none

2、有参函数

def funcname(参数1,参数2):  #参数个数可以为一个和多个
函数体
return

三、函数参数分类

def func(x,y):
res=x+y
return res f=func(1,2)
print(f)

形式参数:定义函数时的参数,本质就是变量名,上例中的x,y就是形式参数

实际参数:执行函数时的参数,本质就是变量的值,实参必须有一个明确的值,上例中的1,2就是实际参数

一)、实际参数:

1、按照位置传递给相应的参数
def func(x,y):
res=x+y
return res f=func(1,2)
print(f)
2、按照关键字传值,将不再受位置的限制
def func(x,y):
res = x+y
return res func(y=2,x=1)
3、按位置传值和按照关键字传值混用
1)按位置传值必须在关键字传值的前面
2)对于一个形参只能赋值一次

二)、形式参数:

1、位置参数:必须传值的参数
2、默认参数:定义时赋值的参数就是默认参数,默认参数必须放在位置参数的后面,有默认参数时,可以不传递参数
3、*args:动态参数,一个*时可以随意传递位置参数,打印结果是把参数作为一个元组输出
def f1(*a):
print(a, type(a)) f1(123, 456, 789, [1, 2, 43]) 打印结果
(123, 456, 789, [1, 2, 43]) <class 'tuple'>
4、动态参数**,传参时必须key,value的形式传递,最后会生成一个字典的形式
def f2(**a):
print(a, type(a))
f2(k1=123, k2=456) 打印结果为
{'k1': 123, 'k2': 456} <class 'dict'>
5、可以同时接受单个参数和key/value参数
def f3(*a, **aa):   #会把所有的位置参数作为一个元组,key/value参数作为一个字典
print(a, type(a))
print(aa, type(aa))
f3(11, 22, 33, k1=123, k2=456) 打印结果为
(11, 22, 33) <class 'tuple'>
{'k2': 456, 'k1': 123} <class 'dict'>
6、把列表,元组,字典传入函数
def f4(*args):
print(args, type(args))
li = [11, 22, 33, 44]
f4(li, 123) # 直接列表的名字,会把列表当做一整个元素当做函数生成后的元组的一个元素
f4(*li) # 使用*列表,会把列表内的每个元素当做函数生成后的元组的每个元素,类似于循环生成元组,元组列表类似 打印结果为
([11, 22, 33, 44], 123) <class 'tuple'>
(11, 22, 33, 44) <class 'tuple'>
7、把字典传入函数
def f5(**kwargs):
print(kwargs, type(kwargs))
dic = {"k1": 123}
f5(**dic) # 将字典传入到函数,需要使用双星号(**) 打印结果为
{'k1': 123} <class 'dict'>
8、混合使用
def f6(x, *args, **kwargs):
print(x)
print(args)
print(kwargs)
f6(1, 2, 3, 4, 5, k="a", v="z") 打印结果为
1
(2, 3, 4, 5)
{'v': 'z', 'k': 'a'}

总结:形式参数的传入顺序: 位置参数-----*args-----**kwargs----默认参数

四、函数的调用和返回值

函数的返回值是return,函数不加return时默认的返回值是None,return可以返回任意值,也可以多个值,return后不跟参数默认返回的是None
def func(x,y):
print(x,y)
res=x+y
return res f=func(1,2) #函数遵循先定义后调用原则,函数的调用就是func(1,2) 函数名加(),函数的执行结果,需要在调用时赋值给变量,然后print
print(f) 执行结果为
1 2 #函数执行时内部代码的执行结果
3 #3即为函数的执行结果,函数的执行结果是返回给函数本身的

Python基础--函数的定义和调用的更多相关文章

  1. python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数

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

  2. python中函数的定义及调用

    python中函数的定义及使用方法 1.函数的概念:函数是将具有独立功能的代码块组织为一个整体,使其具有特殊功能的代码集; 2.函数的作用:使用函数可以加强代码的复用性,提高程序编写的效率; 3.函数 ...

  3. python中函数的定义与调用

    1.为什么要用函数? (1)代码重复太多(2)可读性差 使用函数的好处: (1)代码重用 (2)保持一致性,易维护 (2)可扩展性 2.初始函数定义与调用     函数的定义 def test(x): ...

  4. python第六天函数,定义、调用、不带参函数、带参函数等

    在python定义函数需要用到的关键字是 def  xxxx():,这个关键字就是 defined 的缩写.具体看实例: >>> def hello(): print("你 ...

  5. python中函数的定义,调用,全局变量,局部变量,函数的嵌套使用-初级篇

    函数的基本概述 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,可以思考一下如果有某个功能的代码是在多个地方使用的是否可以只写一次?此时的代码该如何定义.先观察以下的案例: ...

  6. Python中函数的定义必须在调用的前面

    # -*- coding:utf-8 -*- Python中函数的定义必须在调用的前面,但是在函数的内部调用一个函数,不用考虑顺序,只要被调用的函数被定义了即可 #标准的先函数定义,后函数调用def ...

  7. Python函数的定义与调用、返回值、参数

    一.函数是什么 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.比如print(),len()等.但你也可以自己创建函数,这被叫做用户自 ...

  8. Kotlin基础(二)函数的定义与调用

    函数的定义与调用 一.预备知识:在Kotlin中创建集合 fun main(args: Array<String>) { //Kotlin中定义各自集合 val ,,,) val list ...

  9. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

随机推荐

  1. shiro授权

    一.shiro-permission.ini shiro-permission.ini里面的内容相当于在数据库 #用户 [users] #用户zhang的密码是123,此用户具有role1和role2 ...

  2. 笔记:MyBatis Mapper XML文件详解 - Result Maps

    Result Maps(结果集) resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许 ...

  3. MYSQL数据库学习十二 使用MySQL运算符

    12.1 算术运算符 + - * /(DIV) %(MOD) 12.2 比较运算符 > < = <=> != <> >= <= BETWEEN AND ...

  4. c++ --> 变量、常量与运算符

    变量.常量与运算符   一.什么是变量?    在计算机的内存中, 内存被划分为一个一个的内存单元, 每个内存单元有自己的编号, 而变量就是对某一段连续内存单元使用一些更容易记忆.更容易区分的字符组合 ...

  5. Algorithm --> 并查集

    并查集 主要解决图的连通性问题,比如: 1.随意给你两个点,让你判断它们是否连通: 2.问你整幅图一共有几个连通分支: 初始化: void init(int size) { ; i < size ...

  6. windows上SSH服务连接远程主机失败

    putty连接出现错误提示"Network error:connection refused",xshell连接出现错误提示"connection failed:(por ...

  7. ansible之二:模块用法

    一:ansible远程执行命令 [root@ansible ~]# ansible test -m shell -a "date" >> 2016年 08月 02日 星 ...

  8. 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)

    第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链.星际文件系统(IPFS).Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售 ...

  9. Linux下的进程与线程(一)—— 进程概览

    进程是操作系统分配资源的基本单位.线程是操作系统进行运行和调度的基本单位. 进程之间可以切换,以便轮流占用CPU,实现并发.一般进程运行在用户模式下,只能执行指令集中的部分指令. 当进程进行上下文切换 ...

  10. [转] 关于VS中区分debug与release,32位与64位编译的宏定义

    在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的goog ...