内容大纲:

  一:  函数识别

  二:  函数的结构

  三:  函数的返回值,

  四:  函数的参数

  五:  动态参数

  六:  形参的顺序

  七:  名称空间

  八:  作用域

  九:  加载顺序和取值顺序

  十:  内置函数

  十一:  关键字使用,global ,nonlocal

  十二:  函数的嵌套初识

一:函数的初识别

  函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print(),len()等。但你也可以自己创建函数,这被叫做用户自定义函数。

 

二:函数的结构

 

#函数定义
def mylen():
"""计算s1的长度"""
s1 = "hello world"
length = 0
for i in s1:
length = length+1
print(length) #函数调用
mylen()

上面就是咱们写了一个函数,并且成功的调用了它。

定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。

   def 是固定的,不能变,他就是定义函数的关键字。

   空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。

   函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能

   括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!

注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

调用:就是 函数名() 要记得加上括号。

 三:函数的返回值

咱们用len()方法时,得到的结果会赋值给一个变量,然后得到结果:

str_len = len('hello,world')
print(str_len)

但是咱们写的这个函数,并不会得到这样的结果,如何让他和len函数一样,有返回值呢?

那就是在函数的最后加上一个return,return 后面写你需要的返回值就可以了。

return返回值

下面咱们重点研究return关键字的作用:

return关键字的作用

  return 是一个关键字,这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”。

要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值

没有返回值

  不写return的情况下,会默认返回一个None:我们写的第一个函数,就没有写return,这就是没有返回值的一种情况。 

没有return

  只写return,后面不写其他内容,也会返回None,有的同学会奇怪,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,就是一旦遇到return,结束整个函数

只写return

  return None:和上面情况一样,我们一般不这么写。

返回一个值

刚刚我们已经写过一个返回一个值的情况,只需在return后面写上要返回的内容即可。  

return返回一个值

返回多个值

  可以返回任意多个、任意数据类型的值

return返回多个值

  返回的多个值会被组织成元组被返回,也可以用多个值来接收

多个值接收

小结:

  return 只有两个作用:

  1,结束整个函数。

  2,给函数的执行者(调用者)返回值。

四:函数的参数:

   >1 形参:

    >>1:位置参数:按照位置参数, 与实参角度的位置重左至右,一一对应.

    >>2:默认参数:给形参一个默认值,通常是比较常用的数值,但是可以改变,#注意形参一定要在位置的最后面.

    默认参数陷阱:

 def func1 (a,l=[]):
l.append(a)
return l
print(func1(22))
print(func1(66))
print(func1(33))
print(func1(44,[]))
>>>>
[22]
[22, 66]
[22, 66, 33]
[44]

    >>3:万能参数*arg, **kwarg

      可以接受所有的位置参数,关键字参数, 

      可以接受字典

    

   >2 实参: :

      >>1位置参数:必须与形参一直,从左至右一一对应.

     >>2 关键字参数:一一对应即可,不需要对应位置

     >>3 混合参数:两个同时存在

     >>4 三元运算

      >>>1

if 2 >1:
print('ok')
else:
print('no')
print('ok') if 2>1 else print('no') 以上两个式子相等

   A1 if 条件 else A2

五:动态参数

def fun(*args,**kwargs):
print(args)
print(kwargs)
fun(1,2,3,4,'','',[123],sex='nan')
fun({'name':23,'age':'hehe'},eat='chi')
>>>
(1, 2, 3, 4, '', '', [123])
{'sex': 'nan'}
({'name': 23, 'age': 'hehe'},)
{'eat': 'chi'}

   >*arg , **kwarg的魔性用法

    >>

      # * 的魔性用法。
      # 在函数的定义时,* ** 代表聚合。
      # 函数的执行(调用)时,* ** 代表打散。

def fun(*args,**kwargs):
print(args)
print(kwargs)
fun(*(1,2,3),*['a','b','c'],**{'name':'wangzi'},**{'age':36})
# 写一个函数:可以传多个列表,把列表里面的所有元素一个一个的添加到args里面。 def func(*args, **kwargs): # 在函数的定义时,* 代表聚合。
print(args) #(1,2,3,4,5,6,1,2,3) func(*[1,2,3],*(1,2,3),*'fdsaf') # 函数的执行(调用)时,* 打散。

六:形参的顺序问题

  # 位置参数> *args> 默认参数> **kwargs

七:名称空间 

    # 全局名称空间:存放的是py文件中变量与值的对应关系
    # 局部名称空间:临时存放的是函数体里面的变量与值的对应关系。
    # 内置名称空间:内置函数,关键字等等。 print() input()

八:作用域

  # 作用域:
    # 全局作用域:内置名称空间,全局名称空间
    # 局部作用域:局部名称空间

  

  

九:顺序问题

  # 加载顺序:加载到内存的顺序
    # 内置名称空间 ---> 全局名称空间 ---> (当函数执行时)局部名称空间  

  # 取值顺序(就近原则)
    # LEGB 原则
  # 局部名称空间 ---> 全局名称空间 ---> 内置名称空间

十:内置函数

  # print(globals()) # 返回一个字典:包含全局作用域所有的内容
  # print(locals()) # 返回一个字典:当前作用域的所有内容

十一:关键字的使用

  

# 关键字:global nonlocal

# global : 可以局部声明一个全局变量
# age = 46
# name = 'xxx'
# def func():
# global name
# name = 'alex'
# name = 'barry'
# func()
# print(name)

# 局部作用域不能对全局作用域的变量进行修改,只能引用。
count = 1
def func():
global count
count += 1
func()
print(count)

# 总结:
# global :
# 可以局部作用域声明一个全局变量
# 局部作用域不能对全局作用域的变量进行修改,只能引用,通过设置global可以修改。

# nonlocal : 只在python3x中 存在。
# 1,不能操控全局变量。
# name = 'alex'
# def func():
# nonlocal name
# print(name)
# func()

# 内层函数不能对外层函数的变量进行修改,只能引用。
# 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
# 并且引用的哪层,从那层及以下此变量全部发生改变。

def wrapper():
name = 'alex'
def inner():
nonlocal name #加上之后可以引用函数父级的变量
name += 'b'
# print(name)
print('', name)
inner()
print('', name)
wrapper()
>>>>>

1 alex
2 alexb

 

十二:  函数的嵌套初识

  

def func1():
print(1)
def inner():
print(2)
def inner2():
print(3)
print(4)
inner()
print(5)
func1()
>>>>

1
4
2
5

 

总结day7 ---- 函数的内容 ,初识,返回值,进阶(一)的更多相关文章

  1. c&c++函数的参数和返回值的传递终结版

    c++函数的参数和返回值的传递方式有三种:值传递.指针传递和引用传递. 在这之前先看几个例子: 一, int a=10; int b=a; b+=10; 此时b是a的一个拷贝,改变b的值,a并不会受到 ...

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

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

  3. 探寻main函数的“标准”写法,以及获取main函数的参数、返回值

    main函数表示法        很多同学在初学C或者C++时,都见过各种各样的main函数表示法: main(){/*...*/} void main(){/*...*/} int main(){/ ...

  4. day11 python学习 函数的建立,返回值,参数

    函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算,如:发送邮件.计算出 [11,22,38,888,2]中的最大数等 ...

  5. Python——变量的引用和函数的参数和返回值的传递方式

    变量的引用 在python中,所有的变量都是指向地址,变量本身不保存数据,而是保存数据在内存中的地址.我们用下面的程序来理解: a = 10 print(id(a)) a = 11 print(id( ...

  6. Python基础之函数参数与返回值进阶

    参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部: 返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值. 函数的返回值 进阶 利用元 ...

  7. python中函数的参数和返回值

    目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...

  8. 【Go入门教程3】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)

    这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和 ...

  9. 【Go入门教程5】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)

    这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和 ...

随机推荐

  1. 链接ftp,把文件或图片上传到ftp指定的文件夹中

    /******************************************************************** *  * * Filename : .java * Auth ...

  2. Halcon中缩放Region或XLD的方法研究

    在Halcon中,Region和XLD之间可以彼此转换.但这种转换并不是“无损”的,XLD可以是不闭合的,但是Region一定是闭合的.因此,如果将不闭合的XLD转为Region,然后再转回XLD,那 ...

  3. Golang之函数练习

    小例题: package main import "fmt" /* 函数练习, 可变参数使用 写一个函数add 支持1个或多个int相加,并返回相加结果 写一个函数concat,支 ...

  4. c++ stringstream的使用

    stringstream ss;//一次创建多次使用,需要进行clear()操作清除流状态标记 int i=0; while (i<3) { ss<<"21"; ...

  5. Excel中保留有效数字的问题

    在工作表界面中按 <alt>+<F11>,进入代码页面,然后再 WORKBOOK中插入模块,把以下代码COPY入模块中.就可以在工作表中使用 =YXSZ(数值,保留位数). 如 ...

  6. dedecms图片上传函数

    /** * 图片上传类 * @param $file上传图片信息 * @param $ty */ function upload_pic($file, $ty) { if (!is_uploaded_ ...

  7. nvidia 驱动下载地址

    http://www.nvidia.com/Download/index.aspx?lang=en-us

  8. [原创]解读2017 OWASP Top10漏洞体系(含接口安全)

    2017年4月初,OWASP发布了关于Top10的征求意见版. 争议最大的是A7攻击检测与防范不足. 但我主要是按照日常的渗透漏洞进行解读分析的. 解读完毕后,首发t00ls原创文章. https:/ ...

  9. Java NIO API详解(转)

    原文连接: http://www.blogjava.net/19851985lili/articles/93524.html 感谢原作者 NIO API 主要集中在 java.nio 和它的 subp ...

  10. 安装Oracle数据库时出现网络配置需求检查失败

    提示方法:将 Microsoft LoopBack Adapter 配置为系统的主网络适配器.  解决方法:  控制面板->添加硬件->是,(win7及之后没有添加硬件这个选项了,可以在c ...