一 为何要有函数?
不加区分地将所有功能的代码垒到一起,

问题是:
代码可读性差
代码冗余
代码可扩展差

如何解决?
函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用

结论:函数使用必须是:先定义,后调用

二:函数的分类

1.内置函数:built-in
2.自定义函数:
def 函数名(参数1,参数2,...):
'''注释'''
函数体

三:函数的返回值

返回值:可以返回任意类型
没有return:None
return value: value
return val1,val2,val3 :(val1,val2,val3)

return的效果:只能返回一次值,终止函数的执行

四:函数参数的使用

def fuck():
# if 2>1
# print(2)
# #定义阶段只检查代码的语法不会执行代码,所以该函数内有报错!
#
# def fuck():
# aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# #虽然语法没错误但是逻辑有问题,引用了一个不存在变量名。
# #定义的阶段
# def fuck():
# print('fuck1')
# def fuck1():
# print(fuck())
# fuck()#调用的阶段
# 函数的调用遵循先定义后使用的规则(调用)!
# def fuck2():
# return #返回值 可以返回多个值默认以元组的形式返回 只能返回一次值 ,并且会终止函数的执行,因而放与最后!
#返回类型的值,没有return的话会默认返回None
# def fuck3():
# return 'a','b','c'
# b=fuck3()
# print(b)
# def fuck3(x,y):#形参,按照位置定义的形参! 遵循必须传入参数,多一个不行,少一个也不行!
# print('x','y')
#
# fuck3(1,2) #位置实参 ,按照位置定义的实参!首先必须遵循形参的规则!并且按照位置与形参一一对应!
# fuck3(x=1,y=2) #关键字实参, 按照关键字对应形参!首先必须遵循形参的规则!指名道姓的于形参对应
# fuck3(1,y=2) #混合型实参(既有位置实参,也有关键字形参!)首先必须遵循形参的规则!且遵循位置实参必须在关键字实参的前面 #可变长参数:实参参数个数不固定的情况!
#
#
# def fuck4(x,y,*mage): #用*来处理可变长的位置实参将多余出来的实参以元组的形式并且赋值给mage变量!*为位置参数遇到将其拆开!
# print(x,y,mage)
# fuck4(1,2,3,4,5,6,7,8)
# def fuck5(x,y,**kmages):#用**来处理可变长的关键字实参将多余出来的实参以字典的形式并且赋值给kmages变量!
# print(x,y,kmages)
# fuck5(x=1,y=2,z=12,ag=123)
默认参数
函数在定义时给参数进行了默认定义
def cout(a=1):#这个a=1就是默认函数 #默认参数需要注意的问题一:必须放在位置形参后面
#默认参数需要注意的问题二:默认参数通常要定义成不可变类型
#默认参数需要注意的问题三:默认参数只在定义阶段被赋值一次

#命名关键字参数:定义在*后的形参,这类形参,必须被传值,而且要求实参必须是以关键字的形式来传值

# def register(*args,name='egon',age):
# print(args)
# print(name)
# print(age)
#
# # register(name='egon',age=18)
# register(1,2,2,3,age=10

五:函数的嵌套使用

函数的嵌套调用
#
# def max2(x,y):
# if x > y:
# return x
# else:
# return y
#
# def max4(a,b,c,d):
# res1=max2(a,b) #23
# res2=max2(res1,c) #23
# res3=max2(res2,d) #31
# return res3
#
#
# print(max4(11,23,-7,31))

#函数的嵌套定义
def f1():
  def f2():
    def f3():
    print('from f3')
  print('from f2')
f3()
print('from f1')
f2()
# print(f1)
f1()

在函数定义阶段就进行函数内部逐层进行定义。

六:函数对象

#函数是第一类对象: 指的是函数可以被当做数据传递

def func():
print('from func')

#可被引用
# f=func

#可以当做函数的参数
# def func():
# print('from func')
# def foo(x):
# print(x)
# x()
#
# foo(func)

#可以当做函数的返回值
# def foo():
# print('from foo')
# def bar():
# return foo
# f=bar()
# print(f)
# print(foo)

# x=0
# def f1():
# x=1
# def f2():
# # x=2
# print(x)
# return f2
# f=f1()
# # print(f)
# f()

#可以当做容器类型的元素
# def select():
# print('select function')
#
# func_dic={
# 'select':select,
# }
#
# # print(func_dic['select'])
# func_dic['select']()

七:名称空间与作用域

#名字空间:存放名字与值的绑定关系

#名称空间分为三种

#内置名称空间:python解释器自带的名字,python解释器启动就会生成

#全局名称空间:文件级别定义的名字都会存放与全局名称空间,执行python文件时会产生

# x=1
# def func():
# pass
#
# class Foo:
# pass
#
# import os
#
# if 1 > 2 :
# y=3

#局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效,函数调用结束则失效
# def func(x,y): #x=1,y=2
# z=3

# func(1,2)

#三者的加载顺序:内置名称空间->全局名称空间->局部名称空间

#取值:局部名称空间->全局名称空间->内置名称空间

# # max=10
# def func(): #x=1
# # max=20
# print(max)
#
#
# func()

# max=10
#
# def func(): #x=1
# max=20
# # print(max)
# func()
#
#
# print(max)
#

# # x=0
# def f1():
# # x=1
# def f2():
# # x=2
# def f3():
# # x=3
# print(x)
# f3()
# f2()
#
# f1()

#作用域:作用范围
#全局作用域:内置名称空间与全局名称空间的名字属于全局范围,
# 在整个文件的任意位置都能被引用,全局有效
#局部作用域:局部名称空间的名字属于局部范围,
#只在函数内部可以被引用,局部有效

# x=1
# def foo():
# def f2():
# print(x)
# f2()
# def bar():
# print(x)
#
# foo()
# bar()

# def f1():
# x=1
# def f2(): #f2=value
# # x=2
# print(x)
# f2()
# f1()

x=1
def func():
x=2
def f1():pass
# print(dir(globals()['__builtins__'])) #全局作用域name
# print(locals()) #局部作用域name

func()

print(globals() is locals())

#取值查找顺序 局部作用域----->全局作用域


 

python基础-------函数(一)的更多相关文章

  1. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

  2. python基础—函数嵌套与闭包

    python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间   内置在解释器中的名称 2 全局名称空间   顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...

  3. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

  4. Python基础-函数参数

    Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...

  5. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  6. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  7. Python基础-函数篇

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数  函数与函数式编程 1.面向对象: 华山派-- ...

  8. python基础——函数

    1.内置函数的调用: 可以在官方网站查找内置函数及说明,也可以通过help(abs)函数查看相应的信息. https://docs.python.org/3/library/functions.htm ...

  9. Python基础(函数,函数的定义,函数的调用,函数的参数,递归函数)

    1.函数 我们知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...

  10. Python 全栈开发四 python基础 函数

    一.函数的基本语法和特性 函数的定义 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的.函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数 ...

随机推荐

  1. 个人工作中ssd、audio python脚本总结

    1.os.system(cmd)或者os.popen(cmd)调用外部命令 cmd中需要注意特殊字符的转义功能,如: USBSTOR\DISK&VEN_GENERIC-&PROD_SD ...

  2. C#设计模式之七适配器模式(Adapter)【结构型】

    一.引言   从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题, ...

  3. nodejs+express-实现文件上传下载管理的网站

    Nodejs+Express-实现文件上传下载管理的网站 项目Github地址(对你有帮助记得给星哟):https://github.com/qcer/updo 后端:基于nodejs的express ...

  4. CSS样式设置语法全解,样式优先级、值和单位、字体、文本、块级元素,行内元素,替换元素、非替换元素、display、float、position、table、li、光标、边距边框、轮廓、颜色背景

    全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css选择器全解 css操作语法全解 CSS样式设置语法全解: 样式优先级 1. !important标记的样式 > 内联样式(sty ...

  5. ASP.NET Core 处理 404 Not Found

    问题 在没有修改任何配置的情况下,这是用户使用 Chrome 访问不存在的URL时会看到的内容: 幸运的是,处理错误状态代码非常简单,我们将在下面介绍三种技术. 解决方案 在以前的ASP.NET MV ...

  6. npm install 时--save-dev和--save的区别

    package.json中两个字段含义简介 一直在使用npm包管理器,对于npm install module --save-dev 和 npm install module --save这两个的区别 ...

  7. 设计模式之visitor模式,人人能懂的有趣实例

    设计模式,现在在网上随便搜都一大堆,为什么我还要写"设计模式"的章节呢? 两个原因: 1.本人觉得这是一个有趣的设计模式使用实例,所以记下来: 2.看着设计模式很牛逼,却不知道怎么 ...

  8. Python和SQL 2017的强大功能

    Python和SQL Server 2017的强大功能   原文来自:https://www.red-gate.com/simple-talk/sql/sql-development/power-py ...

  9. WordPress 4.8 安装配置教程 (基于 centos 7.3, php 7.0, mysql 5.7.19, nginx 1.12.1)

    最近想要整个 blog,记录自己工作.学习中的点滴.Wordpress 自然是首选,因为内容才是关键,所以也就不怕别人说太 low.网上大部份都是讲 wordpress 配合 apache 的安装教程 ...

  10. go基础编程 day-2

    Go的常亮 关键字: Const Go常亮的多个定义: // 定义常亮的关键字 const // 定义多个常亮 const( PI = 3.14 const1 = " const2 = co ...