函数

函数

引子:

求1-15的和;

求23-36的和;

求55-68的和。

def sum_of_sum(i1,i2):
    result=0
    for i in range(i1,i2+1):
        result+=i
    return result
print(sum_of_sum(1,15))

程序而言:函数就是对程序逻辑进行结构化或者过程化的一种编程方法。

built-in function 内置函数——–>BIF

函数的定义

声明函数的一般形式:

def function_name(arg1,arg2,...,argn):
    '''statements'''
    func_statements
    return Value 

说明如下:

​ 1.函数代码块以 def 关键词开头,后接函数标识符名称和小括号()。

​ 2.任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

​ 3.函数的第一行语句可以选择性地使用文档字符串----用于存放函数说明。

​ 4.函数内容以冒号起始,并且缩进。

​ 5.return [表达式] 结束函数,选择性的返回一个值给调用方。不带表达式的return相当于返回 None。

​ 其中参数列表和返回值不是必须的,return后也可以不跟返回值,甚至连 return也没有。

​ 对于return后没有返回值的和没有return语句的函数都会返回None值

​ 有些函数可能既不需要传递参数,也没有返回值。

​ 没有参数时,包含参数的圆括号也必须写上,圆括号后也必须有“:”。

函数调用

函数文档说明

函数参数

  • 不传参函数
  • 参数函数
    • 顺序

函数返回值

函数参数种类

形参和实参

  • 形参

    • 只有在调用时才分配内存单元。调用结束后,即释放所分配的内存单元。因此,形参只在函数内部有效,函数调用结束返回主调用函数后则不能再使用该形参变量。
  • 实参

    • 实参是一个确定的值,能够传递给形参。
      • 作为位置参数或者关键字参数传递。

位置参数

def usr_manage(name,age,job,hobby):
    print("用户管理系统".center(16,'-'))
    print("\tName:\t",name)
    print("\tAge:\t",age)
    print("\tJob:\t",job)
    print("\tHobby:\t",hobby)
    print("用户管理系统".center(16,'-'))

usr_manage("Tom",20,"IT","Coding")
usr_manage("Jim",30,"IT","Reading")

结果:
-----用户管理系统-----
	Name:	 Tom
	Age:	 20
	Job:	 IT
	Hobby:	 Coding
-----用户管理系统-----
-----用户管理系统-----
	Name:	 Jim
	Age:	 30
	Job:	 IT
	Hobby:	 Reading
-----用户管理系统-----

只传递实参,位置一一对应—>位置参数

使用位置参数时和函数头定义的形参在顺序,个数以及类型上匹配。

默认值参数

def usr_manage(name,age,job,hobby="game"):
    print("用户管理系统".center(16,'-'))
    print("\tName:\t",name)
    print("\tAge:\t",age)
    print("\tJob:\t",job)
    print("\tHobby:\t",hobby)
    print("用户管理系统".center(16,'-'))

usr_manage("Tom",20,"IT")
usr_manage("Jim",30,"IT","Reading")

关键字参数

def usr_manage(name,age,job="IT",hobby="Trip"):
    print("用户管理系统".center(16,'-'))
    print("\tName:\t",name)
    print("\tAge:\t",age)
    print("\tJob:\t",job)
    print("\tHobby:\t",hobby)·
    print("用户管理系统".center(16,'-'))

usr_manage("Jack",21,hobby="coding",job="Student")
usr_manage("Tom",20,"IT","Coding")
usr_manage("Jim",30,"IT","Reading")

默认值参数,关键字参数,必须放置于位置参数之后。

不定参数

在Python中不定参数主要是指*args**kwargs两个魔法变量。

他们俩主要是用于函数定义,我们可以将不定数量的参数传递给一个函数。

  • *args*用来接收任意非键值对的任意数量的参数列表给函数。
  • **kwargs用来接收任意不定长度的键值对列表给函数。
def un_para_key(x,y,*z,**kwargs):
    print(x,y,z)
    print(kwargs)
    print(type(kwargs))

un_para_key(1,2,3,4,5,'a','b',a=1,b=2,c=3,d=5)

结果:
1 2 (3, 4, 5, 'a', 'b')
{'a': 1, 'b': 2, 'c': 3, 'd': 5}
<class 'dict'>
# 写一个函数,计算传入字符中的数字,字母,空格以及其他字符的个数
def func(p):
    digits = 0
    alpha = 0
    space = 0
    others = 0
    for i in p:
        if i.isdigit():
            digits += 1
        elif i.isalpha():
            alpha += 1
        elif i.isspace():
            space += 1
        else:
            others += 1
    return (digits, alpha, space, others)
结果:(5, 5, 2, 2)

函数引用

函数属性

函数属性是Python中另外一个使用了句点属性标识并拥有名字空间的领域。

你可以获得每个 pyhon 模块,类,和函数中任意的名字空间。你可以在模块 foo 和 bar 里都有名为 x 的一个变量,,但是在将这两个模块导入你的程序后,仍然可以使用这两个变量。所以,即使在两个模块中使用了相同的变量名字,这也是安全的,因为句点属性标识对于两个模块意味了不同的命名空间,比如说,在这段代码中没有名字冲突:

内嵌函数产生

作用域

bar()整个函数都处于外部foo()函数的作用域里(foo()是我们可以从外部访问的一个对象区域)。除了在foo()内部,其他地方无法对bar()进行调用。

变量作用域

作用域的产生

就作用域而言,python和C有很大差别,只有当变量在module,Class,函数中定义的时候,才会有作用域的概念

def foo():
    a="foo"
    print(a)
foo()
print(a)

在作用域中定义的变量,一般只在作用域内有效。需要注意的是,在if-elif-else,for-else,while-else,try-except(else-finally)等关键字的语句块中不会产生作用域。

作用域的类型

Python中,使用一个变量时并不要求需要预先声明它。但在真正使用的时候,他必须绑定到某个内存对象 (被定义,赋值)。这种变量名的绑定将在当前作用域引入新的变量,同时,屏蔽外层作用域中的同名变量。

  • 局部作用域(locale—L)

    • 局部变量:包含在def关键字定义的语句块中,即在函数中定义的变量。每当函数被调用时都会创建一个新的局部作用域。Python中也有递归,即自己调用自己,每次调用都会创建一个新的局部命名空间。在函数内部的变量声明,除非特别的声明为全局变量,否则均默认为局部变量。有些情况需要在函数内部定义全局变量,这时可以使用global关键字来声明变量的作用域为全局。局部变量域就像一个 栈,仅仅是暂时的存在,依赖创建该局部作用域的函数是否处于活动的状态。所以,一般建议尽量少定义全局变量,因为全局变量在模块文件运行的过程中会一直存在,占用内存空间。
      注意:如果需要在函数内部对全局变量赋值,需要在函数内部通过global语句声明该变量为全局变量。
  • 嵌套作用域(enclosing—E)

    • E也包含在def关键字中,E和L是相对的,E相对于跟上层的函数而言也是L。与L的区别在于,对于一个函数而言,L是定义在定义在此函数内部的局部作用域。
    • 主要为了实现Python的闭包,而增加的实现。
  • 全局作用域(Global—G)

    即在模块层次中定义的变量。模块顶层申明的变量具有全局作用域。从外部来看,模块的全局变量就是一个模块对象的属性。

  • 内置作用域(built-in—B)

    • 系统固定模块中定义的变量。

搜索变量名的优先级:局部作用域>嵌套作用域>全局作用域>内置作用域

全部变量和局部变量

gbl_str="foo"
def foo():
    loc_str="bar"
    return gbl_str+loc_str
print(foo())
print(gbl_str)
print(loc_str)
def foo():
    a=666
    print("foo(),修改前a:\t",a)
    a=888
    print("foo(),修改后a:\t",a)

def bar():
    print("bar(),a:\t",a)
foo()

结果:
foo(),修改前a:	 666
foo(),修改后a:	 888
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值