第五章 函数
时间:2019-08-28
本文章向大家介绍第五章 函数,主要包括第五章 函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
5.1 函数基础内容
创建函数
def 函数名(): pass 函数名() # 调用函数
5.1.1参数
形参实参
def get(n): # n 是形参,也就是变量 print(n) get(1) # 实参 就是给n 赋值
位置参数 > 关键字参数
# 位置参数 ''' 注意 : 传参数不能 少传 或 多传 n(1,2,3,4) TypeError: n() takes 3 positional arguments but 4 were given ''' def n (a1,a2,a3): print(a1,a2,a3) n(1,2,3) # 关键字参数 ''' 注意 : 位置参数 > 关键字参数 n(a1=1,2,3) 关键字参数在前必须全传关键字参数, 不然 就报错 SyntaxError: positional argument follows keyword argument ''' def n (a1,a2,a3): print(a1,a2,a3) n(1,2,a3=3) n(1,a2=2,a3=3) n(a1=1,a2=2,a3=3)
默认参数
''' 注意 : 如果传参时,不给值,可以给以默认值传入 给值,就重新赋值 ''' def n (a1,a2,a3=17): print(a1,a2,a3) n(1,2,) n(1,2,3) #### 默认值传可变类型有坑 def func(a1,a2=[]): a2.append(a1) return a2 v1 = func(1) # [1] print(v1) v2 = func(2) # [1, 2] print(v2) print(v1,v2) # [1, 2] [1, 2] # a2 = [] 就在函数func 中存着,第一次 v1 = func(1) ==== v1 指向a2 [1] # 第二次 v2 =func(2) ====v2 指向 a2 =[1,2] 而v1 也指向 a2 像字符串的拷贝 v3 = func(1,[11,22,33]) # a2 =[11,22,33] print(v3) # [11, 22, 33, 1]
万能参数 *a r gs **kw a r gs
''' *args 是个元祖形式 拿走其余的位置参数 **kwargs 字典形式 拿走其余的关键字参数 注意 默认是 args kwargs 带*参数 都可以的 只有这俩个时 ,不分 位置参数 > 关键字参数 n(1,2,k1=2,k2=2,*(3,4,5),**{'k3':3}) #(1, 2, 3, 4, 5) {'k1': 2, 'k2': 2, 'k3': 3} ''' def n(*args): print(args) n(1,2,3,4,[2.43,3,4],'alex') n(*(1,2,3,4)) #(1, 2, 3, 4) n((1,2,3,4)) #((1, 2, 3, 4),) def n(*args,**kwagrs): print(args,kwagrs) n(1,2,3,[2,3,3],ki=1,k2=2,k3=3) #应用 def n(a1,a2,a3=4,*args,**kwargs): print(a1,a2,a3,args,kwargs) n(1,2,3,4,55,k1=1,k2=2) n(1,*(2,3,3,4,5),k1=1,k2=2) #1 2 3 (3, 4, 5) {'k1': 1, 'k2': 2} n(*(1,2),2,3,4,k1=1,k2=2) #1 2 2 (3, 4) {'k1': 1, 'k2': 2}
5.1.2 返回值
return 默认返回none
def count(a) : n +=1 return n #返回给函数调用 ifon = count(1) print(ifon) def get_count(count): n = 'false' if len(count) < 5: n = 'ture' return n #把 n 返回给函数 m =get_count((10,2,3,4,4.3)) print(m) # 可以return 任何类型 def n(): return 1,2,3,2 m= n() print(m) def n(): return [1,2,'alex'] m= n() print(m)
# 练习
'''
用函数完成目标要求
读取文件 进行操作
目标 1 a = ['alex|123|12','reic|123|15']
2 b = [['alex',"123",'12'],['reic','123','15']]
2 c = [{'name':'alex','age':'123','foin':'12'}
{'name':'reic','age':'123','foin':'15'}
'''
练习1
def get_list(wen):
a =[]
for line in wen:
line = line.strip('\n')
a.append(line)
return a
# ['alex|123|12', 'reic|123|15']
f1=open("a.txt",mode='r',encoding="utf-8")
n =get_list(f1)
print(n)
f1.close()
练习2
def get_list1(n):
a =[]
for line in n:
line = line.strip('\n')
li = line.split("|")
a.append(li)
return a
# [['alex', '123', '12'], ['reic', '123', '15']]
f1=open("a.txt",mode='r',encoding="utf-8")
m = get_list1(f1)
print(m)
f1.close()
练习3
def get_list1(n):
lst =[]
for line in n:
line = line.strip('\n')
li = line.split("|")
dic ={}
dic['name']=li[0]
dic['age']=li[1]
dic['money']=li[2]
lst.append(dic)
return lst
f1=open("a.txt",mode='r',encoding="utf-8")
n =get_list1(f1)
print(n)
f1.close()
5.1.3 作用域
- global 全局变量 在函数外的变量
- nonlobal 局部变量 就是一个函数的函数体的变量 局部没有到父级找
# 如果在调用函数之前可以修改变量
def v ():
print(name) # alex
def v1 ():
name = 'jion'
print(name) # jion
def v2 ():
print(name) # jion
name ='ball' # 调用前修改
v2()
print(name) #ball
name = 1
print(name) # 1
v1()
v()
修改变量
# 1 在函数内修改全局变量 name = 'alex' def info(): print(name) def info1(): global name name = 'jion' print(name) info1() info() # 2 在嵌套函数内部修改 父级变量 name = 'alex' def info(): print(name) def info1(): name = 'jion' print(name) def infos (): nonlocal name name = 233 print(name) infos() print(name) info1() info() ''' 注意 : 在修改 global 或者 ninlobal 时 在函数名和global 之间不能操作''' name = 'alex' def info(): print(name) def info1(): name = 222 # 注意点 global name name = 'jion' print(name) info1() info() # SyntaxError: name 'name' is assigned to before global declaration
想清楚为什么要有global和nonlocal。
自我理解 原因是 全局变量和函数是俩个封闭的内存空间。互不影响,所以在函数内部修改不了全局变量就定义了globa 在函数嵌套,内层函数无法修改上层函数 , nongloba 就可以
原文地址:https://www.cnblogs.com/xuanxuan360/p/11425186.html
- IronPython资料
- WordPress免插件仅代码实现“返回顶部、返回底部、评论”效果(样式一)
- encodeURIcomponent编码和ASP.NET之间编码转换
- WordPress免插件仅修改代码去掉评论/留言里的链接
- 阅读Ext 学习Javascript(一)Core/Ext.js
- 利用腾讯的ip地址库做ip地址定位
- WordPress登陆不了后台的原因及解决方法(登陆界面不断返回)
- select元素的options.add 与 insertbefore的区别
- 如何去理解 拓扑排序算法
- WordPress免插件仅代码实现文章归档(模板页面)I
- Bing Map App 开发 还没入门遇见错误无法继续
- 使用MongoDB的支持Linq 驱动NoRM
- Ext的组件模型印象
- 2018年预计仍将持续活跃走高的数字货币都有哪些?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 实战编写 wireshark 插件解析私有协议
- 安卓 APP 三代加壳方案的研究报告
- 将博客主题替换成 Clean Blog
- Go 数据存储篇(一):基于内存存储实现数据增删改查功能
- 创建联系表单页面并通过 Ajax 提交表单请求数据
- Go 数据存储篇(二):通过 JSON 格式存取文本数据
- Go 数据存储篇(三):通过 CSV 格式读写文本数据
- Laravel 8 正式发布,一起来看看有哪些新特性吧
- Azkaban 2.5 Documentation
- 噪声纹理之消融效果! shader 入门精要! Cocos Creator Shader !
- Docker安装官方Nexus3镜像构建Docker私服 实践笔记
- js事件大全
- Centos7 安装 jdk8 的正确姿势 实践笔记
- 初探雾效果!shader 源码分析与讲解! Cocos Creator 3D Shader Fog !
- js键盘键值大全