1 函数基本语法及特性


定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

特性:

  1. 减少重复代码
  2. 使程序变的可扩展
  3. 使程序变得易维护

语法定义:

 def sayhi():#函数名
print("Hello, I'm nobody!") sayhi() #调用函数

可以带参数

 #下面这段代码
a,b = 5,8
c = a**b
print(c) #改成用函数写
def calc(x,y): #x、y是形参
res = x**y
return res #返回函数执行结果 c = calc(a,b) #a、b是实参,结果赋值给c变量
print(c)

2 返回值


要想获取函数的执行结果,就可以用return语句把结果返回

注意:

  1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
  2. 如果未在函数中指定return,那这个函数的返回值为None
def test01():
pass def test02():
return 0 def test03():
return 3,'hello',['Amy','Bob'],{'name':'Alex','age':21} t1=test01()
t2=test02()
t3=test03() print('from test01 return is [%s]:'%type(t1),t1)
print('from test02 return is [%s]:'%type(t2),t2)
print('from test03 return is [%s]:'%type(t3),t3) # 输出:
# from test01 return is [<class 'NoneType'>]: None
# from test02 return is [<class 'int'>]: 0
# from test03 return is [<class 'tuple'>]: (3, 'hello', ['Amy', 'Bob'], {'name': 'Alex', 'age': 21})

总结:

  • 返回值数=0:返回None
  • 返回值数=1:返回object
  • 返回值数>1:返回tuple

3 函数参数


1.形参和实参

形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体时使用形参,目的是在函数调用时接收实参(实参个数、类型应与形参一一对应)。

实参:实际参数,调用函数时传给函数的参数,可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。

2.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)

正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。

def test(x,y):
print(x)
print(y) test(1,2) #位置参数:实参与形参位置一一对应
test(y=2,x=1) #关键字参数:与形参位置无关
test(1,y=2) #混用:关键字参数必须放在位置参数之后
#test(y=2,1) #报错

3.默认参数

默认参数在调用时不指定,那就是默认值,指定了的话,就用你指定的值。

特点:调用函数时,默认参数非必须传递。

def test(x,y=2):
print(x)
print(y) test(1) #不指定默认参数
test(1,5) #指定默认参数

4.参数组(非固定参数)

若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数

*args:接收 0-N 个位置参数,转换成元组形式

def test1(*args):
print(args) test1(1,2,3,4,5,6) # 输出:(1, 2, 3, 4, 5, 6)
test1(*[1,2,3,4,5,6]) # 同上 def test2(x,*args):
print(x,args) test2(1,2,3,4,5,6) # 输出:1 (2, 3, 4, 5, 6)
test2(1) # 输出:1 () ,后面这个()就是args,只是因为没传值,所以为空

**kwargs:接收 0-N 个关键字参数,转换成字典的形式

def test1(**kwargs):
print(kwargs) test1(name='Alex',age=21,sex='M') # 输出:{'name': 'Alex', 'age': 21, 'sex': 'M'}
test1(**{'name':'Alex','age':21,'sex':'M'}) # 同上
test1() #输出:{} def test2(name,**kwargs):
print(name,kwargs) test2('Alex',age=21,sex='M') # 输出:Alex {'age': 21, 'sex': 'M'}
test2('Alex') # 输出:Alex {} def test3(name,age=21,**kwargs):
print(name,age,kwargs) test3('Alex',sex='M',hobby='singing',age=18) # 输出:Alex 18 {'sex': 'M', 'hobby': 'singing'}

4 局部变量与全局变量


在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
#像字符串,数字等类型的变量不可以在局部修改其值
name = "Alex" def change_name(name):
print("before change:", name) # Alex
name = "alex"
print("after change", name) # alex change_name(name)
print( name) # Alex #像列表、字典、集合、类等类型的变量可以在局部修改
names=['Amy','Bob','Cindy']
def change_name(names):
print("before change:", names) # ['Amy', 'Bob', 'Cindy']
names[0] = "Alex"
print("after change", names) # ['Alex', 'Bob', 'Cindy'] change_name(names)
print( names) # ['Alex', 'Bob', 'Cindy']

Python3学习之路~3.1 函数基本语法及特性、返回值、参数、局部与全局变量的更多相关文章

  1. javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量

    定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ...

  2. Python3学习之路~0 目录

    目录 Python3学习之路~2.1 列表.元组操作 Python3学习之路~2.2 简单的购物车程序 Python3学习之路~2.3 字符串操作 Python3学习之路~2.4 字典操作 Pytho ...

  3. 【Java学习笔记之七】java函数的语法规则总结

    函数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函数. ...

  4. day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...

  5. C#中的函数(二) 有参有返回值的函数

    接上一篇 C#中的函数(-) 无参无返回值的函数 http://www.cnblogs.com/fzxiaoyi/p/8502613.html 这次研究下C#中的函数(二) 有参有返回值的函数 依然写 ...

  6. IOS学习之路-- 指针&宏函数

    如果*p被()包住,说明指针变量p将来指向的是函数 //声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果* ...

  7. Python3学习之路~4.3 装饰器

    定义:本质是函数,装饰其他函数就是为其他函数添加附加功能. 原则: 不能修改被装饰函数的源代码 不能修改被装饰函数的调用方式 实现装饰器知识储备: 函数即“变量” 高阶函数 把一个函数名当做实参传递给 ...

  8. Python3学习之路~4.1 列表生成式、生成器

    1 列表生成式 我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,怎么实现?你可能会想到2种方式 a=[0,1,2,3,4,5,6,7,8 ...

  9. Python3学习之路~8.1 socket概念及参数介绍

    一 socket介绍 TCP/IP 基于TCP/IP协议栈的网络编程是最基本的网络编程方式,主要是使用各种编程语言,利用操作系统提供的套接字网络编程接口,直接开发各种网络应用程序. socket概念 ...

随机推荐

  1. Spark排序之SortBy

    sortBy函数源码:接收三个参数,第一个参数必须,第二个和第三个参数非必要 def sortBy[K]( f: (T) => K, ascending: Boolean = true, num ...

  2. MFC AfxMessageBox(_T("Please Load Rawdata First !"));

    AfxMessageBox(_T("Please Load Rawdata First !"));

  3. [Linux] ssh-key 公钥文件格式

    SSH 协议(Secure Shell 协议)最初在 1995 年由芬兰的 Tatu Ylönen 设计开发,由 IETF(Internet Engineering Task Force)的网络工作小 ...

  4. LostRoutes项目日志——编辑project.json

    第一个Scene编译后运行会报错: Uncaught TypeError: Cannot read property 'style' of null 这是因为没有在project.json中包含已经编 ...

  5. 【SpringCloud错误】错误记录

    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates ...

  6. 理解syslinux,SYSLINUX和PXELINUX

    在研究网络装机的过程中,菜菜地被Syslinux.SYSLINUX和PXELINUX这些定义折磨了一下 它们有什么区别和联系?为什么配置PXELINUX要安装的是Syslinux而不是Pxelinux ...

  7. 【CF944G】Coins Exhibition DP+队列

    [CF944G]Coins Exhibition 题意:Jack去年参加了一个珍稀硬币的展览会.Jack记得一共有 $k$ 枚硬币,这些硬币排成一行,从左到右标号为 $1$ 到 $k$ ,每枚硬币是正 ...

  8. Cannot change version of project facet Dynamic Web Module to 3.0 异常问题处理

    如何解决Tomcat服务器在初始化应用的时候的以下异常问题 1,Cannot change version of project facet Dynamic Web Module to 3.0 2,O ...

  9. easyui---修改删除查询

    修改:在toolsbar 修改工具中 { text:"编辑用户", iconCls:"icon-edit", handler:function(){ var s ...

  10. svn的安装方法

    SVN的安装很常用.但是我好像经常用了之后就忘记.这次把笔记放在这里,如果以后忘了,就可以随时查看了. 步骤: 一.下载SVN 这里常用的是site.zip. 之前是手头有现成的site.zip.今天 ...