一: 函数的定义与调用

1.1 :函数的定义

def 关键字必需写

函数名必需是字母,数字,下划线组合,并且不能以数字开头

函数名后面要加括号然后“:”

为函数写注释是一个好习惯

#函数的定义

def函数名():

函数体

1.2: 函数的调用

使用函数名加括号进行函数的调用

函数名就时变量名,值为内存地址,加小括号就可以调用函数

#函数的调用

函数名()

1.3:示例

#示例

s = 'sdfsd'

# 函数的定义 def my_len():

defmy_len():

i=0for k ins:

i+=1

returni

# 函数的调用 my_len()

length=my_len()print(length)

二:函数的返回值

函数的返回值很重要

return关键字

如果想得到函数返回值1:函数有返回的动作即函数有返回值2:通过变量赋值的方式获取这个返回值变量= 函数调用

return 会将函数终止

2.1  没有返回值

默认是 None

1:不写return ------比较常用-比如我们只关注这个函数的功能,不关系他的返回值

deffunc():

l= ['wangys','xiaogongzhu']for i inl:print(i)print(func())

2: 只写return ------- 比较常用-比如说只要满足某个条件就终止函数

deffunc():

l= ['wangys','xiaogongzhu']for i inl:if i == 'wangys':print(i)return

print(func())

3: return None ------不常用

2.2   返回一个值

1:可以返回任意数据类型

2:只要返回就可以接受到i

deffunc():return 1

print(func())deffunc():return 'wangys'

print(func())deffunc():return [1,2,3,4]print(func())deffunc():return {'name':'wangys'}print(func())

2.3  返回多个值

1:多个返回值用多个变量接收,有多少返回值,就用多少变量接收

2:也可以用一个变量接收,值是一个元祖(返回值组成)

deffunc():return 1,2,3r1,r2,r3=func()print(r1,r2,r3)deffunc():return 1,2,3r=func()print(r)

2.4  序列解压

#l 列表,通过与列表元素个数相当的变量接收

l=[1,2,3]

a,b,c=lprint(a,b,c)#可以选择性的接收

l = [1,2,3,4,5]

a,*_=lprint(a)print(*_)1

2 3 4 5

#

三: 函数的参数

参数分形参和实参之分

如下

def my_len(s): #s---形式的参数---形参

i =0for k ins:

i+=1

returniprint(my_len('sdfsd')) #sdfsd 实际的参数---实参

3.1  实参

传递参数时,分位置传参和按关键字传参。

位置在前,关键字在后

3.1.1 : 按照位置传参

defmy_sum(a,b):

res= a+breturnres

my_sum(1,2)

3.1.2  按照关键字传参

defmy_sum(a,b):

res= a+breturnresprint(my_sum(a=1,b=2))print(my_sum(b=2,a=1))

3.1.3 :可以混用

但是位置实参必须在前,关键字实参必须在后,而且不能给参数传递多个值

#位置参数在关键字参数的后面

SyntaxError: positional argument follows keyword argumentdefmy_sum(a,b):

res= a+breturnres

ret= my_sum(a=1,2)print(ret)#给参数传递了多个值

TypeError: my_sum() got multiple values for argument 'a'

defmy_sum(a,b):

res= a+breturnres

ret= my_sum(1,a=2)print(ret)#正确的传参 关键字参数在后 位置参数在前

defmy_sum(a,b):

res= a+breturnres

ret= my_sum(1,b=2)print(ret)

3.2   形参

位置参数--*args---默认参数---**kwargs

位置参数:必须传

默认参数:可以不传参,如果不传,则使用默认值,如果传递了则使用传递的参数

函数的形参和实参并没有强的绑定关系,可以随意按照规则传递

3.2.1  位置形参

#定义一个函数,函数有两个位置形参

deffunc(a,b):return a,b #返回传递的参数

ret= func(1,2) #按照位置传参,并获取函数的返回值

#打印含绘制

print(ret)

deffunc(a,b):returna,b

ret= func(a=1,b=2) #按照关键字传参

print(ret)

3.2.2  动态参数*args

*args 可以传递多个参数   *参数名称 但习惯参数名称为args

不能接收关键字参数

按照位置参数传参的值

def my_sum(*args):

n =0

for i inargs:

n+=i

returnn

print(my_sum(1,2))

print(my_sum(1,2,5,6))

def my_sum(*a):

n =0

for i ina:

n+=i

returnn

print(my_sum(1,2))

print(my_sum(1,2,5,6))

关键字参数传递报错

def func(*args):

passret = func(1,2,3,a=b)

print(ret)

3.2.3 : 默认参数

默认参数可以不传递,如果不传递就使用默认值,如果传递就使用传递的参数

def classmate(name,sex='男'):

res= ('%s:%s'%(name,sex))returnres

ret= classmate('wangys') # sex是默认参数,没有传递参数print(ret)

def classmate(name='wangys',sex='男'):

res= '%s:%s'%(name,sex)returnres

ret= classmate('wangc','男') # name是默认参数,通过位置传递print(ret)

3.2.4   动态参数**kwargs

按照关键字字参数的值,组织成一个字典,可以接收任意多个关键字参数

def func(**kwargs):print(kwargs)

func(a= '1',b = '2')

3.2.5 *args **kwargs 组合使用,可以接收任意传参

def func(*args,**kwargs):print(args,kwargs)

func(1,2,3,a = '4',b = '5')

3.2.6  给*args和**kwargs传参的另一种方式

def func(*args): #将传递的参数聚合

print(args)

l= [1,2,4,5]

func(*l) #将列表打散传递参数

def func(**kwargs): #将传递的参数聚合

print(kwargs)

d= {'a':1,'b':2}

func(**d) #将字典打散

3.3  可变数据类型做参数的陷阱

错误用法 每次调用修改的都是同一个列表

#来自官方文档

def f(a, l=[]):

l.append(a)returnlprint(f(1))print(f(1))print(f(1))print(f(1))

[1]

[1, 1]

[1, 1, 1]

[1, 1, 1, 1]

正确用法

def f(a, L=None):if L isNone:

L=[]

L.append(a)returnLprint(f(1))print(f(1))print(f(1))print(f(1))

[1]

[1]

[1]

[1]

四 函数的注释

第一行应该是对象目的的简要概述。为简洁起见,它不应显式声明对象的名称或类型,因为这些可通过其他方式获得(除非名称恰好是描述函数操作的动词)。这一行应以大写字母开头,以句点结尾。

如果文档字符串中有更多行,则第二行应为空白,从而在视觉上将摘要与其余描述分开。后面几行应该是一个或多个段落,描述对象的调用约定,它的副作用等。

Python 解析器不会从 Python 中删除多行字符串文字的缩进,因此处理文档的工具必须在需要时删除缩进。 这是使用以下约定完成的。 文档字符串第一行 之后 的第一个非空行确定整个文档字符串的缩进量。(我们不能使用第一行,因为它通常与字符串的开头引号相邻,因此它的缩进在字符串文字中不明显。)然后从字符串的所有行的开头剥离与该缩进 “等效” 的空格。 缩进更少的行不应该出现,但是如果它们出现,则应该剥离它们的所有前导空格。 应在转化制表符为空格后测试空格的等效性(通常转化为8个空格)。

下面是一个多行文档字符串的例子:

>>>

>>> def my_function():

... """Do nothing, but document it.

...... No, really, it doesn't do anything.

... """

... pass

...

>>> print(my_function.__doc__)

Do nothing, but document it.

No, really, it doesn't do anything.

deffunc(a,b):'''函数的主要功能

:param a: 参数a的含义

:param b: 参数的含义

:return: 返回值说明'''

pass

五:命名空间及作用域

5.1 命名空间

5.1.1 内置命名空间

python解释器启动就可以使用的名字存储的命名空间

一旦python解释器启动,内置命名空间存储的名称就会放到内存中

在内置命名空间,不能使用全局和局部名称

5.1.2 全局命名空间

是在程序从上到下被执行的过程以此加载到内存中

可以使用内置的命名空间,但是不能使用局部的命名空间

5.1.3 局部命名空间

函数内部定义的名字

当函数被调用的时候,才会产生这个名称

可以使用全局的命名空间,也可以使用内置的命名空间

5.2  作用域

全局作用域----内置和全局名称空间内的名称  globals()

局部作用域--函数内部的 locals()

六  函数的嵌套

defmax(a,b):return a if a>b elsebdefthe_max(x,y,z):

c=max(x,y)returnmax(c,z)print(the_max(1,2,3))

nonlocal 声明一个局部变量,该变量首先是局部变量,而且是里改函数最近的上一层函数内部局部变量

a=1defouter():

a= 2

definner1():

a= 3

definner2():

nonlocal a

a+=1inner2()print('inner1局部变量a=3,现在是:', a)

inner1()print("outer局部变量a=2,现在是:", a)

outer()print('全局变量a=1现在是:',a)

七 函数的本质

函数名就是内存地址

deffunc():print(123)print(func)

函数名可以赋值

deffunc():print(123)

func2=func

func2()

函数名可以作为容器类型的元素

deffunc():print(123)

func2=func

l=[func2,func]for i inl:

i()

函数名可以作为函数的参数

deffunc():print('133')defwangys(f):

f()

wangys(func)

函数名可以作为函数的返回值

deffunc():print('123')defwangys(f):returnf

wangys(func)()

八:闭包函数

闭包函数:内部函数含有对外部作用域而非全局作用域名字的引用,那么该内部函数就称位闭包函数,通常我们会将闭包函数名进行返回,然后在外部进行调用

可以保护变量

变量常驻内存

defouter():

a=1

definner():print(a+1)returninner

func=outer()

func()

闭包函数的嵌套

defouter():

name='wangys'

deffunc():

age=18

definner():print('My name is %s,i am %d year old'%(name,age))returninnerreturnfunc

f= outer() #f=func

print(f.__name__)

i= f() #i=inner

print(i.__name__)

i()

from urllib.request importurlopendefindex():

url='http://www.baidu.com'

definner():returnurlopen(url).read()returninner

func= index() #func = inner

ret = func() #调用inner并且将返回值赋值给ret

print(ret)

九:小练习题

计算 n个数字之和

def my_sum(*args):

total=0for i inargs:

total+=ireturntotalprint(my_sum(1,2,3))

写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

当去有规律去取一个列表或者元祖的元素的时候,可以使用切片

deffunc(l):return l[1::2]print(func([1,2,3,4,5]))

写函数,判断用户传入的值(字符串、列表、元组)长度是否大于5。

deffunc(x):return len(x)>5

print(func('wangys'))

写函数,检查传入列表的长度,如果大于2,

那么仅保留前两个长度的内容,并将新内容返回给调用者。

deffunc(x):return x[:2]

写函数,计算传入字符串中【数字】、【字母】、【空格】 以及 【其他】的个数,并返回结果。

deffunc(s):

dic= {'num':0,'alpha':0,'space':0,'other':0}for i ins:ifi.isdigit():

dic['num']+=1

elifi.isalpha():

dic['alpha']+=1

elifi.isspace():

dic['space']+=1

else:

dic['other']+=1

returndicprint(func('123sdfsd _+'))

写函数,检查传入字典的每一个value的长度,如果大于2,

那么仅保留前两个长度的内容,并将新内容返回给调用者。

dic = {"k1": "v1v1", "k2": [11,22,33,44]}

PS:字典中的value只能是字符串或列表

deffunc(dic):for i indic:if len(dic[i])>2:

dic[i]=dic[i][:2]returndic

dic= {"k1": "v1v1", "k2": [11,22,33,44]}print(func(dic))

写函数,接收两个数字参数,返回比较大的那个数字。

#三元运算#变量= 条件为True的返回值 if 条件 else 条件为false的返回值

deffunc(a,b):

c= a if a>b elsebreturncprint(func(1,2))deffunc(a,b):return a if a>b elsebprint(func(1,2))

def func python_python函数之基础相关推荐

  1. pythonfunc函数的功能,python函数中def func(*args)这里*的作用是什么?

    python函数中def func(*args)这里*的作用是什么? mip版  关注:160  答案:3  悬赏:0 解决时间 2021-02-23 21:54 已解决 2021-02-23 03: ...

  2. python中def func是什么意思_Python的函数参数详解

    原标题:Python的函数参数详解 前言 Python中函数的参数可以分为两大类形参和实参~ def func(x, y): # x, y 就是形参 print(x, y) func(2, 3) # ...

  3. load()是python文件操作的函数_python基础总结(函数,文件操作)

    divmod(a, b)#分别取商和余数 float([x])#将一个字符串或数转换为浮点数.如果无参数将返回0.0 int([x[, base]])#将一个字符转换为int类型,base表示进制 l ...

  4. python函数的基础知识_Python入门基础知识点(函数进阶)

    动态参数: 动态接收位置参数: def eat(*args): #在形参位置,*叫做聚合 print('我想吃',args) eat('大米饭','中米饭','小米饭') #收到的结果是一个tuple ...

  5. [Python学习] 专题一.函数的基础知识

            最近才开始学习Python语言,但就发现了它很多优势(如语言简洁.网络爬虫方面深有体会).我主要是通过<Python基础教程>和"51CTO学院 智普教育的pyt ...

  6. python的def语句_【零基础学Python】def语句,参数和None值

    像之前的print().input()和len()功能,Python提供了一些类似的内置函数,另外也可以自己编写自定义函数. 示例: def hello(): print('Howdy!') prin ...

  7. 闭包函数 python_python 函数,闭包

    假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return m bigger = my_max(10,20) print( ...

  8. python 二分查找函数_Python基础14_递归函数,二分查找

    一. 递归 在函数中调用函数本身, 就是递归 prthon中递归的最大深度是998 def func(n): print(n) n += 1 func(n) func(1) 递归的应用:我们可以使用递 ...

  9. python拟合三元函数_python基础教程之常用内置函数、三元运算、递归

    目录 常用内置函数 abs/round/sum eval/exec enumerate max/min sorted zip map filter 补充:reduce lambda 初识递归 再谈递归 ...

最新文章

  1. Savior:渗透测试报告自动生成工具
  2. react安装_「React实战」三分钟搭建React开发环境
  3. 浅析 record 使用场景
  4. Java压缩技术(七) TAR——Commons实现
  5. 前端学习(2306):react之组件使用
  6. Try Redis : Redis 入门教程
  7. 大型企业网络配置系列课程详解(八) --VoIP的配置与相关概念的理解
  8. 工具丨超好用的免费AWR分析工具
  9. java转json数组对象_java对象转json、json数组 、xml | 学步园
  10. 蓝牙数字密钥建立在过去实践的基础上, 以创造更安全的未来
  11. 用计算机模拟演示样本均值的抽样,计算机模拟演示文稿.ppt
  12. 计算机中1kb等于多少字节,1kb等于多少个字节
  13. 完整版第四方Oreo易支付源码+28K易支付源码
  14. selenium+chromedriver实现自动填写问卷星问卷
  15. flask文件上传 flask-uploads
  16. 大学四年的收获及工作感悟
  17. python分割文件_python简单分割文件的方法
  18. Linux Centos8踩坑
  19. 非常感人非常激发人的潜能的信,你一定要看!
  20. linux + colmap 错误汇总

热门文章

  1. ◆ヽ 独自看到世间的美景而无人分享,应该是一种遗憾吧。
  2. [bzoj4942][noi2017]整数【线段树】
  3. 前端的框架iframe
  4. javascript模块化开发
  5. python使用函数互换_Python之数据转换
  6. linux ms漏洞,Samba MS-SAMR/MS-LSAD中间人攻击漏洞(CVE-2016-2118)
  7. Linux Vim文本编辑器-Vim常用命令
  8. JMeter循环控制器的使用
  9. logback 使用regex匹配进行日志脱敏
  10. 华硕2020年显卡_玩游戏显卡怎么配?2020年游戏显卡推荐