一:学习内容

  • 函数概述
  • 函数的参数与返回值
  • 参数值传递和引用传递
  • 关键字参数
  • 默认参数
  • 不定长参数

二:函数概述

1.本质:函数就是对功能的封装

2.优点:

简化代码结构,增加了代码的复用度(重复使用的程度)
如果想修改某些功能,只需要修改对应的函数即可

3.函数定义

格式:
def 函数名(参数列表):
    语句
    return 表达式

注意:最后的return 表达式,可以不写,相当于return None

举例:

def myPrint():
    print("tester is a good girl!")
    print("tester is a nice girl!")
    print("tester is a beautiful girl!")

4.函数调用

格式:函数名(参数列表)

注意:参数列表是函数的调用者给函数传递的信息,如果没有参数,小括号也不能省略

函数调用的本质:实参给形参赋值的过程

举例:

myPrint()

三:函数参数与返回值

1.无参无返回值的函数

举例:

#定义了一个无参无返回值的函数
def myPrint():
    print("tester is a good girl!")
    print("tester is a nice girl!")
    print("tester is a beautiful girl!")

#调用
myPrint()

2.函数的参数--参数必须要按顺序传递,个数必须要对应

形参(形式参数):定义函数时小括号中的变量,本质是变量

实参(实际参数):调用函数时给函数传递的数据,本质是值

举例:

def myPrint(str,age):
    print(str,age)

#调用

a = 18
myPrint("tester",a)

3.函数的返回值

def mySum(num1,num2):
    #将结果返回给函数的调用者
    #执行完return语句,该函数就结束了,return后面的代码语句不执行
    return num1+num2

#调用
print(mySum(3,2))

四:参数值传递和引用传递

1.值传递:传递的是不可变类型(数字、字符串、元组),不改变原值

举例:

def fun1(num):
    num = 10

temp = 20
fun1(temp)
print(temp)

2.引用传递:传递的是可变类型(列表、字典、集合),改变原值

举例:

def fun2(lis):
    lis[0] = 100

li = [1,2,3,4]
fun2(li)
print(li)

五:关键字参数

1.关键字参数:允许函数调用时参数的顺序与定义时不一致

def myPrint(str,age):
    print(str,age)

a = 18
#未使用关键字参数,传参必须与定义参数的顺序一致
myPrint("tester",a)

#使用关键字参数,但是正常情况下还是保持参数顺序和定义顺序一致
myPrint(age=19,str="tester")

六:默认参数

1.默认参数:调用函数时,如果没有传递参数,则使用默认参数

举例1:

def myPrint(str="tester",age=18):
    print(str,age)

myPrint()

举例2:
#要用默认参数,最好将默认参数放到最后
def myPrint(str,age=18):
    print(str,age)

myPrint("tester")

七:不定长参数--能处理比定义时更多的参数

1.接受元组数据

不定长参数第一种写法 *args,*args为元组类型,*代表元组数据

举例1:

#加了星号(*)的变量会存放所有未命名的变量参数,如果在函数调用时没有指定参数,它就是一个空元组
def func(name,*args):
    print(name)  #会打印第一个tester
    print(type(args))   #是个元组
    for i in args:
        print(i)  #会打印后续的is a good girl

func("tester","is","a","good","girl!")

#不给定后面的*arr参数
func("tester")

举例2:求多个数的和
def mySum(*num):
    sum = 0
    for i in num:
        sum += i
    return sum
print(mySum(1,2,3,4))

2.接受字典键值对类型数据

不定长参数第二种写法 **kwargs,**kwargs为字典类型,**代表键值对数据

举例1:

def func2(**kwargs):
    print(kwargs)
    print(type(kwargs))

func2(x=1,y=2,z=3)

func2(1,2,3)  #会报错

3.接受任意类型数据

*args为元组类型,*代表元组数据
**kwargs为字典类型,**代表键值对数据

举例:

def func3(*args, **kwargs):
    print(args)   #会打印(1, ('a', 2), [1, 2], {1, 2})
    print(kwargs)  #会打印{'x': 1, 'y': 2, 'z': 3}

func3(1,("a",2),[1,2],set([1,2]),x=1,y=2,z=3)

最新文章

  1. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
  2. 7.5 数据注解特性--MaxLength&&MinLength
  3. RPM包制作教程
  4. java script 确认框
  5. 处理海量数据的高级排序之——归并排序(C++)
  6. 如何判断一条sql(update,delete)语句是否执行成功
  7. No plugin found for prefix 'jetty' in the current project and in the plugin groups 【转】
  8. Android控件之Button(按钮控件)和ImageButton(图片按钮控件)
  9. 向html中添加节点
  10. [转]使用CSS3 Grid布局实现内容优先
  11. SQLServer2008找出所有包含172.17.224.40字样的存储过程
  12. linux文件名乱码解决办法
  13. error C2018: unknown character '0xa1'
  14. ios7下二维码功能的实现
  15. 12 - 多线程、执行队列、GCD
  16. nginx启动,重启,关闭
  17. SSRS Fields cannot be used in page headers or footers
  18. Java 爬虫学习
  19. javascript 深度克隆对象
  20. Linux每日小技巧---统计服务器IP连接数

热门文章

  1. Binding的Path(路径)
  2. 112、如何使用stack (Swarm19)
  3. this(ES6箭头函数里的this)
  4. PID应用详解
  5. 会了docker你又多了一个谈资(下)
  6. Summer training round2 #8(Training26)
  7. HTML5 Geolocation学习
  8. Visual Studio开发首选!DevExtreme v19.1.6全新来袭
  9. JAVA》eclipse——(一)jdk的下载、安装与配置
  10. 43 java中的异常处理机制的简单原理和应用