python day10 函数(第二篇)
一、内容回顾
1.面试题相关:
1.py2和py3的区别
2.运算符的计算 :3 or 9 and 8
3.字符串的反转
4.is和==的区别
5.v1 = (1) v2 = 1 v3 = (1,)有什么区别
v1 、v2都是数字,v3是元组
6.线上操作系统:centos
7.每种数据类型,列举你了解的方法
8.深浅拷贝
9.文件操作,大文件如何读取内容(如50G的日志文件)
v=open(……)
for line in v:
print(line)
v.close()
10.一行写出:9*9乘法表
git流程
2.函数
方法(数据类型的)类似于函数,但不是函数 。
严格按照顺序传参数:位置方式传参
实际参数可以是任意类型
return没有返回值时,默认返回None
return的作用:1.返回值 2.终止函数的执行
函数内部执行过程中,遇到return就终止
return可以返回任意类型
特殊情况:return 1,2,'alex' 表示返回的是元组,与return(1,2,'alex')相同
二、今日内容
1. 参数
1.1基本参数知识
参数可以是任意个数
可以是任意类型
def func(a1,a2,a3,a4):
print(a1,a2,a3,a4) func(2,'name',[1,2,3],False)
1.2 位置传参(调用函数并传入参数)(执行)
调用/执行函数的时候严格按照位置的顺序传入参数
def func(a1,a2,a3):
print(a1,a2,a3)
func(66,'alex',3)
1.3 关键字传参(执行)
关键字传参就是将形参放入到实参中去使用
def func(a1,a2):
print(a1,a2)
func(a1=22,a2=8)
关键字传参与位置传参是可以混合使用的:位置传入的参数要放在前面,关键字传参要放在后面,最后等于总参数个数
def func(a1,a2,a3):
print(a1,a2,a3)
func(1,2,a3=3)
func(1,a2=2,a3=3)
func(a1=1,a2=2,a3=3)
func(a1=1,2,3) # 是错误的
def func() : 自定义函数 open() 这两个为python的内置函数
pass len()
1.4 默认参数
def func(a1,a2,a3=9,a4=10): # 默认参数a3=9,a4=10
print(a1,a2,a3,a4)
func(11,22) # 不给a3,a4传值,则a3,a4等于默认参数
func(11,22,10)
func(11,22,10,100)
func(11,22,10,a4=100)
func(11,22,a3=10,a4=100)
func(11,a2=22,a3=10,a4=100)
func(a1=11,a2=22,a3=10,a4=100)
1.5 万能参数(用于打散)
*args
可以接受任意个数的位置参数,并将参数转换成元组。
- 调用函数无*
def func(*args):
print(*args) func(1,2) ==> (1,2)
func(1,2,[12,3,4]) ==> (1,2,[12,3,4])
func((11,22,33)) ==> ((11,22,33)) # 参数是一个元组,打印出来的效果是元组套元组。
调用函数有*
def func(*args):
print(*args) func(*(11,22,33)) ==>(11,22,33) # *是用来打散元组的,将元组中的每个元素作为参数。
func(*[11,22,33]) ==>(11,22,33) # *可以用来打散列表/元组 /字典/集合,只是循环内部元素
只能用位置传参
def func(*args):
print(args) func(1)
func(1,2) # args=(1, 2)
func((11,22,33,44,55)) # args=((11,22,33,44,55),)
func(*(11,22,33,44,55)) # args=(11,22,33,44,55)
**kwargs
可以接受任意个数的关键字参数,并见参数转换成字典
调用函数无*
def func(**kwargs):
print(***kwargs) func(k=1) **kwargs = {'k':1}
func(k1=1,k2=3) **kwargs = {'k1':1,'k2':3}
调用函数有*
def func(**kwargs):
print(**kwargs) func(**{'k1':1,'k2':4,'k3':9}) **kwargs = {'k1':1,'k2':4,'k3':9}
只能用关键字传参
*args/**kwargs综合使用:无敌 + 无敌 => 真无敌
def func(*args,**kwargs):
print(args,kwargs) func(1,2,3,4,5,k1=2,k5=9,k19=999) *arg = (1,2,3,4,5) **kwargs = {'k1':2,'k5':9,'k19':999}
func(*[1,2,3],k1=2,k5=9,k19=999) *arg = (1,2,3) **kwargs = {'k1':2,'k5':9,'k19':999}
func(*[1,2,3],**{'k1':1,'k2':3}) *arg = (1,2,3) **kwargs = {'k1':1,'k2':3}
func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3})
*arg = (111,222,1,2,3) **kwargs = {'k11':'alex','k1':1,'k2':3}
1.6 参数相关的重点
定义函数
def func(a1,a2):
pass def func(a1,a2=None): # 对于默认值,不可变类型随便写,如果是可变类型(有坑)。
pass def func(*args,**kwargs):
pass
调用函数
位置参数在前,关键字参数在后。
2. 作用域
在python文件中:
py文件:全局作用域
函数:局部作用域
a = 1
def s1():
x1 = 666
print(x1)
print(a)
print(b) b = 2
print(a)
s1()
a = 88888
def s2():
print(a,b)
s1() s2()
每个作用域中的数据只有作用域自己可以调用,如果作用域中调用的数据没有,可以调用全局作用域的
全局作用域只能调用全局的
在全局作用域中的函数可以互相调用(调用已经存在的),但不可以直接调用作用域中的作用域
总结:
1.一个函数就是一个作用域
2.作用域中查找数据规则:优先在自己的作用域找数据,自己没有就去“父级”-->“父级”-->直到全局,全局没有就报错。 (作用域的嵌套)
注意:父级作用域中的值到底是多少?
x = 10
def func():
x = 9
print(x) func()
课上练习题
x = 10
def func():
x = 9
print(x)
def x1():
x = 999
print(x) func() x = 10
def func():
x = 9
print(x)
def x1():
x = 999
print(x)
x1() func() x = 10
def func():
x = 9
print(x)
def x1():
x = 999
print(x)
print(x)
x1() func() x = 10
def func():
x = 8
print(x)
def x1():
x = 999
print(x)
x1()
print(x) func() x = 10
def func():
x = 8
print(x)
def x1():
print(x)
x1()
print(x) func() x = 10
def func():
x = 8
print(x)
def x1():
print(x)
x = 9
x1()
x = 10
print(x) func() x = 10
def func():
x = 8
print(x)
def x1():
print(x)
x1()
x = 9
x1()
x = 10
print(x) func()
3.子作用域中只能只能找到父级中的值,默认无法重新为父级的变量进行赋值。
不能进行赋值,只能对可变类型进行内部修改
# #####################
name = 'oldboy'
def func():
name = 'alex' # 在自己作用域再创建一个这样的值。
print(name)
func()
print(name) # #####################
name = [1,2,43]
def func():
name.append(999)
print(name)
func()
print(name)
如果非要对全局的变量进行赋值需要加global(强制赋值)
#示例一
name = "老男孩“
def func():
global name
name = 'alex'
func()
print name # 示例二
name = ["老男孩",'alex']
def func():
global name
name = '我'
func()
print(name) # 示例三
name = "老男孩"
def func():
name = 'alex'
def inner():
global name
name = 999
inner()
print(name)
func()
print(name)对父级的变量赋值用nonlocal,先找到父级的变量再进行赋值 (强制赋值)
name = "老男孩"
def func():
name = 'alex'
def inner():
nonlocal name # 找到上一级的name
name = 999
inner()
print(name)
func()
print(name)
补充:全局变量必须全部要大写
USER_LIST = [11,22,3]
def func():
name = 'asdf'
USER_LIST.append(12)
USER_LIST.append(name)
func()
print(USER_LIST)
python day10 函数(第二篇)的更多相关文章
- python之函数第二篇
一.名称空间与作用域 名称空间分类: 内置名称空间 import this dir(buil-in) 查看全部内置 全局名称空间 局部名称空间 在函数体内等 查询全局和局部 globals()方法可以 ...
- Python开发【第二篇】:初识Python
Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- Python笔记_第二篇_面向过程_第二部分_1.函数
函数:这个词属于一个数学概念,在编程语言借鉴了这个概念,表现形式是一段程序代码的组合,也叫“程序集”.有过编程基础的人很容易理解这个概念,当我们编写程序越来越多的时候,程序设计大师们会把散乱的程序进行 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- Python基础【第二篇】
一.Python的标准数据类型 Python 3中主要有以下6中数据类型: Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionary( ...
- Python之路(第二篇):Python基本数据类型字符串(一)
一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...
- python学习【第二篇】初识python
python的安装 windows 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机] ...
随机推荐
- Delphi 10.2.3
链接: https://pan.baidu.com/s/1Fy2LbcpmujOiqtNZ3ZySOQ 提取码: ts5k
- UITableView自定义Cell中,纯代码编程动态获取高度
在UITableView获取高度的代理方法中,经常需要根据实际的模型重新计算每个Cell的高度.直接的做法是在该代理方法中,直接根据模型来返回行高:另 [1]-(CGFloat)tableView:( ...
- Android Studio中绘制simpleUML类图详细说明及使用
一.Android Studio中安装simpleUML 1.下载simpleUML jar包 地址为:http://plugins.jetbrains.com/ 搜索 simpleUMLCE 2. ...
- DOM知识点总结
今天简单整理了一下js三部曲之DOM部分的内容,二话不说先上笔记: 1.什么是DOM? Document Object Model,即文档对象模型,它是让JavaScript能够操作html和xml的 ...
- Kong(v1.0.2)代理参考
介绍 在本文中,我们将通过详细解释Kong的路由功能和内部工作原理来介绍它的代理功能. Kong公开了几个接口,可以通过两个配置属性进行调整: proxy_listen,它定义了一个地址/端口列表,K ...
- (转)通过注册表修改VC6.0的字体
出处:http://www.cnblogs.com/PocketZ 在VC6.0下更改字体,我们一般通过菜单-Tools-Options-Format来更改 但在我的win7 64位系统下这一选项下的 ...
- spring从服务器磁盘读取图片,然后显示于前端页面上
需求是,前台通过传参,确定唯一图片,然后后台在服务器磁盘中读取该图片,然后显示于前台页面上. 后台代码: @RequestMapping("unit/bill/showeinvoice&qu ...
- windows使用im4java 提示FileNotFoundException
1)安装imageMagic时候要勾上convert那一行,确保安装目录下有convert.exe 2)使用image4java的全局类里面加上 //ImageMagick的安装路径 public s ...
- Difference between hash() and id()
https://stackoverflow.com/questions/34402522/difference-between-hash-and-id There are three concepts ...
- C++日常应用-定时器
定时器的使用:分为有句柄 无句柄两类 有句柄情况下的使用:头文件: 1.添加映射 BEGIN_MSG_MAP(类名) MESSAGE_HANDLER(WM_TIMER, OnTimer) END_MS ...