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.配置环境变量 [右键计算机] ...
随机推荐
- idea jdk版本问题
问题描述: Information:Using javac 1.6.0_43 to compile java sourcesInformation:java: Errors occurred whil ...
- python3-基础5
#函数 1 什么是函数? 2 为什么要用函数? 3 函数的分类:内置函数与自定义函数 4 如何自定义函数 5 语法 6 定义有参数函数,及有参函数的应用场景 7 定义无参数函数,及无参函数的应用场景 ...
- 【如皋OJ】1127:正整数N转换成一个二进制数
1127: 正整数N转换成一个二进制数 时间限制: 1 Sec 内存限制: 128 MB提交: 85 解决: 59[提交] [状态] [讨论版] [命题人:zhuzhigang] 题目描述 输入一 ...
- note 7 递归函数
递归:程序调用自身 形式:在函数定义有直接或间接调用自身 阶乘:N!=123...N def p(n): x = 1 i = 1 while i <= n: x = x * i i = i + ...
- java 的Date 日期相关操作
String 与 Date互转(1)基于SimpleDateFormat实现: package com.bky.df; import java.text.ParseException; import ...
- Java学习笔记——鸵鸟学习记(一)
1. 变量 1.1 使用变量 a, 变量三要素:名字 值 类型 b, 变量命名 英文字母,数字,下划线,但不能数字开头 并不是英文单词,用拼音也可以 随便写也可以,但可读性差 区分大小写(Y与y是不同 ...
- intellij与eclipse默认快捷键对比
最近想用intellij,于是找找快捷键.用惯了eclipse,都不太适应intellij的快捷键.慢慢的就适应了常用的快捷键 Idea 与 Eclipse 快捷键的区别,上为Eclipse的快捷键, ...
- Android 开发 8.0版本启动Service的方法
前言 google在更新Android8.0后对Service的权限越发收紧.导致目前想要启动服务必需实现服务的前台化(否则在服务启动5秒后,系统将自动报错).下面我们就来看看如何在8.0上启动服务 ...
- 验证demo
// chenwenjun.cpp : 定义控制台应用程序的入口点.//#include "stdafx.h"#include <iostream>#include & ...
- Oracle从入门到精通----学习笔记
书名:<Oracle从入门到精通:视频实战版>秦靖.刘存勇等编著 第4章 SQL基础 1.SQL语言分类 数据定义语言 --- DDL,Data Definition Language 数 ...