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

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

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

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

二:函数的分类

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. KM算法新识

    看了很多写的好的文章,但是针对代码注释来讲,这篇文章最合适.                                 如果人生会有很长,愿你的荣耀永不散场--wenr大牛. #include ...

  2. 用html +js+css 实现页面轮播图效果

    html 页面 <html lang="en"> <head> <meta charset="UTF-8"> <met ...

  3. Interface request structure used for socket ioctl's

    1. 结构体定义 /* * Interface request structure used for socket * ioctl's. All interface ioctl's must have ...

  4. SAP问题【转载】

    1.A:在公司代码分配折旧表时报错? 在公司代码分配折旧表时报错,提示是"3000 的公司代码分录不完全-参见长文本" 希望各位大侠帮我看看. 3000 的公司代码分录不完全-参见 ...

  5. SAP 月结F.19与GR/IR

    http://blog.sina.com.cn/s/blog_3eeba40101008v75.html 为什么要做月结?月结究竟都结些啥? 月结的目的和手段都不知道,只知道一部分.月结,为了出资产负 ...

  6. CSS之 absoulte 属性

    特性: absoulte 与 float 具有相同的特性:包裹性,与破坏性  absoulte 与 float 可以交替使用  不受 relative 限制的 absoulte 定位,行为表现上可以不 ...

  7. putty 的美化

    1.       中文乱码问题. 这个问题由来已久,每当我查看 mount到linux下的windows 中文目录的时候,都是一堆乱码, putty 也拒绝我输入中文, 一句话,这玩意,对中文过敏. ...

  8. C++指针的用法

    在学习C++或者是C语言时难免会动态分配内存,这时你便要使用到指针.这里以C++为例,讲一下使用指针的注意事项: 比如说,Dog dog = new Dog(),这么一句语句系统就会为你分配内存.当然 ...

  9. mysql安装教程以及配置快捷方式

    1.首先双击exe 3.Next 安装过程省略.... Win+r 然后输入:cmd 打开dos窗口后: 输入: mysql -uroot -p你设置的密码 案例:mysql -uroot -proo ...

  10. Excel 查找某列中的数据在另一列是否存在及输出第三例的数据

    最近在操作Excel文件数据导入数据库时,经常需要检查Excel中哪些数据数据库中已经存在,哪些不存在,然后再将不存在数据库中的Excel数据导入:在此过程中,经常需要操作Excel中的数据,所以.也 ...