1.什么是函数

它是一段功能代码,理解为一种功能行为,在内存中有空间区域,函数需要被调用才能执行(通过函数名来调用);

好处:

1).提高代码的复用性

2).提升代码的阅读性

3).增加代码的扩展性

4).增强了代码的维护性

2.函数有五要素组成

①.函数修饰符                    关键字def开头

②.函数返回值类型             有返回值(类型:int、float、str、list...)/没有返回值

③.函数名                           函数的名字(标识符一种,满足规则和规范)

④.形参列表                        定义在小括号内(可能有形参,也可能没有)

⑤.函数体                           一段业务逻辑代码

3.定义格式

① ③(④):

                   ⑤

4.函数名的定义

标识符的一种,满足规则和规范:

对于其规范,和变量名保持一致

5. 自定义函数的四种定义场景

1).无参无返回值

2).无参有返回值

3).有参无返回值

4).有参有返回值

演示自定义函数的四种场景:

  1. #1无参无返回值
  2. def func1():
  3. print('hello method...')
  4.  
  5. #2无参有返回值
  6. def func2():
  7. return True
  8.  
  9. #3有参无返回值
  10. def func3(a,b):
  11. print(a + b)
  12.  
  13. #4有参有返回值
  14. def func4(a,b):
  15. #在自定义函数中调用本模块(.py文件)别的自定义函数
  16. func1()
  17. return a if a > b else b

6.形参列表的多种定义情况:

演示形参的多种定义情况:

1). 默认参数的使用:

  1. def func1(name="张三",age=18,height=175.5):
  2. print(name,age,height)
  3.  
  4. # 调用自定义函数(不传递参数):会使用默认参数参与之后的运算
  5. func1()
  6. # 调用自定义函数(传递部分参数):传递的部分使用传递内容,其余部分使用默认参数参与运算
  7. func1("李四")

2). 一般参数的使用

  1. def func2(name,age,address):
  2. print(name,age,address)
  3.  
  4. #调用自定义函数:必须传递参数,而且位置和个数都要对的上
  5. func2("李雷",21,"北京")

3). 关键字参数的使用:(好处:不用记住每个变量的位置)

  1. def func3(name,age,address):
  2. print(name,age,address)
  3.  
  4. #体现在调用自定义函数上:传递类型键值对的组合
  5. func3(address="上海",name="韩梅梅",age=20)
  1. 7.可变参数的使用

在定义一项功能时,对于参数层面(到底几个不确定),此时可以使用可变参数来实现;
参数解释:*args:接受0~无穷多个单值,存入到一个元祖中返回; **kwargs:接受0~无穷多个键值对组合,存入到一个字典中返回。

  1. def func4(*args,**kwargs):
  2. print(args,type(args)) # 元祖类型
  3. print(kwargs,type(kwargs)) # 字典类型
  4.  
  5. func4()

案例1:实现多个整数求和的操作

自定义函数:两个原则

1).有没有形参?   有,但是个数不确定,使用可变参数

2).有没有返回值?   可有可无

  1. def mySum(*args):
  2. sum1 = 0
  3. for i in args:
  4. sum1 += i
  5. return sum1
  6.  
  7. mySum = mySum(1,2,3,4,5)
  1. 案例2
  1. def func1(*args,**kwargs):
  2. print(args)
  3. print(kwargs)
  4.  
  5. func1(0,100,3.14,True,"abcd",[10,20,30],name="班长",age=25)
  6.  
  7. # 以下代码会报错:因为*args定义在前,**kwargs定义在后,由于在传递参数的过程中已经出现了类似name="班长",
  8. # age=25这样的代码,那么其后就不能出现单值数据的传递了
  9. func1(0,100,3.14,True,"abcd",[10,20,30],name="班长",age=25,-100,3.14)

【注意事项】:

1).形式参数(形参):它可以认为是一个入口(在函数名后面的小括号中定义),并不存在实际数据,在代码的体现上就是定义变量,等着接受实参;

2).实际参数(实参):实实在在存在的数据(可以是各种类型),将实际参数传递给形式参数(过程:称为参数传递),之后在函数体中参数运算的都是实际参数

3).返回值:在整个函数执行完毕后需不需要返回给程序一些数据(分类:有返回值/没有返回值)

如果有返回值:需要使用关键字return进行数据的返回

4).return关键字的作用:

(1).将需要返回的数据给到函数的调用处(调用者)

(2).表示函数的结束

(3).和return关键字在同一作用域,在其后面不要去定义任何的代码,因为永远不可能被执行到

(4).return关键字后面也可以不定义任何的内容,它的作用仅仅意味着函数结束了...

8.全局变量&局部变量

全局变量: 1).作用域比较大,定义在.py文件中,函数外;2).可以被文件中任何一个函数所使用。

局部变量:1).作用域比较小,函数的形参或者函数体中; 2).只能被当前的这个函数所使用,出了此函数,外部够不着它。

在局部位置修改全局变量的值:先使用global关键字定位到需要修改的全局变量,然后在使用全局变量 = 值操作进行修改。

在内部函数中修改外部函数中局部变量的值:先使用nonlocal关键字定位到需要修改的局变变量,再使用局部变量 = 值操作进行修改。

  1. a=10 #a为全局变量
  2. def func1():
  3. global a
  4. a=20
  5. print(a)
  6. def func2():
  7. b=100 #b为局部变量
  8. print(a,b)
  9.  
  10. # 以下代码有问题:因为b是属于func2()函数中的局部变量,出了func2()函数 外界都不能使用
  11. print(b)

9.外部函数&内部函数

内部函数:定义在外部函数的内部,成为其一部分(认为是外部函数的成员)

  1. def outer():
  2. print("我是外部函数...")
  3. b=20
  4. def inner():
  5. print("我是内部函数...")
  6. nonlocal b
  7. b=30
  8. print(b)
  9. inner()
  10. print(b)
  11. outer()
  12.  
  13. # 以下代码有问题:对于内部函数的执行只能依赖于它的外部函数,不能出了外部函数在外界单独执行;
  14. inner( )

[补充概念】:

1.标识符

大白话:凡是可以自己起名字的地方,都是标识符

遵守以下三点规则

1).范围:a~z、A~Z、0~9、下划线(_)

2).数字不能开头:abc123 合法   ;  123abc 不合法

3).不能使用关键字和保留字,但是可以包含关键字和保留字 :class 不合法 ; classroom 合法

遵守以下两点规范

1).驼峰式原则:

对于变量而言:如果是多个单词组成,第一个单词首字母小写,其余单词首字母大写,剩余字母全部小写。举例:helloWolrdChina

2).下划线原则:

举例:hello_world

2.常量和变量

常量:一旦定义,其值不可变;例如:0、100、3.14、True/False、"abc"...

变量:它是内存中的一块存储区域,可以存储数据,并且随时可以改变区域中的内容,

第一次存储进去的数据我们称为初始化值;

变量的定义格式:

1).变量名 = 值

2).变量名1,变量名2,...,值n = 值1,值2,...,值n

3).变量名1 = 变量名2 = ... = 变量名n = 值

3.弱&强类型语言

强类型语言:在定义变量的时候,就需要有明确的数据类型;

弱类型语言:在定义变量的时候,不需要有明确的数据类型;

4.关键字

理解:被python语言赋予特殊函数的英文单词           例如:class、if、else、while、for...

5.内置函数

执行可以通过定义函数名执行成功的都是内置函数;函数之间是可以嵌套调用的(案例中有体现)。常用的内置函数:round();abs();max();min();sum();hex();oct();bin();pow(x,y);divmod(x,y);ord();chr();type();id();len() ...

1). round(num1,num2):得到四舍五入之后的值;round里面的的第一个参数是接收的变量,第二个参数是保留多少位小数(可不填,表示保留整数位)

2). abs(num):得到数据的绝对值,特点:不管正数还是负数的绝对值都是其正数的形式,0的绝对值还是0

3). max(seq)、min(seq):得到seq对象的最大、最小值

4). sum(seq):得到seq中所有元素累加以后的和值返回

【注意事项】:1).对于str类型的数据不能使用sum()求和,没有意义。2).对于sum()函数只能接受容器类型数据,不能接受多个单值数据

  1. # 以下两个函数就是非法的
  2. print(sum(''))
  3. print(sum(1,2,3,4,5))

5). hex(num):将十进制数据num转换为十六进制返回(数据类型:str)

6). oct(num):将十进制数据num转换为八进制返回(数据类型:str)

7). bin(num):将十进制数据num转换为二进制返回(数据类型:str)

8). pow(x,y):计算x的y次方返回

9). divmod(x,y)返回一个元祖对象,有两个元素,第一个元素记录了x除以y后的商,第二个元素记录了x除以y后的余数

10). ord(str)传入字符数据,返回整数值(ascii码值)

11). chr(num)传入整数数据(ascii码值),返回字符数据

【补充】字符编码(字符集),记住3个分界点: '0' -->  48; 'A'  -->  65; 'a'  -->  97

12). type():得到数据的类型返回

13). id():得到数据的内存地址(十进制的形式)返回

14). len():得到数据的长度

2.Python函数/方法(method/function)详解的更多相关文章

  1. python魔法方法-自定义序列详解

    自定义序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列(dict,tuple,list,string等). 如果要实现这个功能,就要遵循 python ...

  2. Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量

    Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量 一丶线程的理论知识 什么是线程:    1.线程是一堆指令,是操作系统调度 ...

  3. JS函数动作分层结构详解及Document.getElementById 释义 js及cs数据类型区别 事件 函数 变量 script标签 var function

    html +css 静态页面 js     动态 交互   原理: js就是修改样式, 比如弹出一个对话框. 弹出的过程就是这个框由disable 变成display:enable. 又或者当鼠标指向 ...

  4. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

  5. Python 单向队列Queue模块详解

    Python 单向队列Queue模块详解 单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import thread ...

  6. JavaScript箭头函数中的this详解

    前言 箭头函数极大地简化了this的取值规则. 普通函数与箭头函数 普通函数指的是用function定义的函数: var hello = function () { console.log(" ...

  7. PHP函数call_user_func和call_user_func_array详解

    今天在群里面,有个叫lewis的在问call_user_func_array的用法,因为之前一直没有用过,也不能说什么,于是看一下手册,发现是这么写的: call_user_func_array (P ...

  8. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

  9. Python调用windows下DLL详解

    Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...

随机推荐

  1. screen配置窗口显示

    screen的下方不显示,可以复制如下的代码 cd /root && vim .screenrc 贴上如下内容 hardstatus on hardstatus alwayslastl ...

  2. show processlist详解

    摘自:https://blog.csdn.net/sunqingzhong44/article/details/70570728?utm_source=copy 如果您有root权限,您可以看到所有线 ...

  3. Affinity Propagation

    1. 调用方法: AffinityPropagation(damping=0.5, max_iter=200, convergence_iter=15, copy=True, preference=N ...

  4. Codeforces_711_B

    http://codeforces.com/problemset/problem/711/B 比较简单,过程有点繁琐,先找一行包含那个0的行,得到和,以此填出0位置的值,然后判断这个矩阵是否符合条件. ...

  5. codeforces 1020 C Elections(枚举+贪心)

    题意: 有 n个人,m个党派,第i个人开始想把票投给党派pi,而如果想让他改变他的想法需要花费ci元.你现在是党派1,问你最少花多少钱使得你的党派得票数大于其它任意党派. n,m<3000 思路 ...

  6. 一台电脑上配置多个git的ssh key

    前几天公司的代码库全部迁移到了阿里云上,在配置git的ssh key的时候遇到了一个问题,那就是自己的密钥在添加时提示已经存在,原来是自己的个人账号上已经添加过这个密钥了,公司分配的账号就不能再添加这 ...

  7. 纯JavaScript实现页面行为的录制

    在网上有个开源的rrweb项目,该项目采用TypeScript编写(不了解该语言的可参考之前的<TypeScript躬行记>),分为三大部分:rrweb-snapshot.rrweb和rr ...

  8. Kittenblock画笔基础,移动留下痕迹的蝴蝶,图形化编程经验分享

    Kittenblock画笔基础,移动留下痕迹的蝴蝶,图形化编程经验分享 跟很多学生聊过,很多学生不是不努力,只是找不到感觉.有一点不可否认,同样在一个教室上课,同样是一个老师讲授,学习效果迥然不同.关 ...

  9. 文件共享服务之Samba

    一.Samba服务概述 在Windows网络环境中.机之间进行文件打印和共享是通过微软自己的SMB/CIFS协议来实现的.SMB(服务消息块)和CIFS(通用互联网文件系统)这两个都是微软的私有协议 ...

  10. 在centos6.3下安装php的Xdebug

    首先下载一个xdebug http://www.xdebug.org/docs/ 官网上有windos版本和linux源码版本的,我们下载一个源码包xdebug-2.2.5.tgz 然后进入安装流程 ...