Python简记--函数

Python编程技巧精讲
本文深入探讨Python编程中的字符换行、属性访问权限、高阶函数如map()、reduce()及lambda表达式的应用,同时讲解如何使用filter进行过滤操作及sorted进行排序。文章通过实例演示了如何利用这些技巧提升代码效率。

1、字符换行:

print('ab \ncd \nef')

Python函数

首字母大些
python 2 map不要转换为list
python 3 map不能直接Print 要转换为list

map()函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
def format_name(s):
return s.title()
print (list(map (format_name,['ad','asdsfs','rergWQQ'])))

1、s.capitalize()

2、s[0].upper s[1:].lower

3、s.title()


2、reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
reduce 做阶乘/字符串拼接
from functools import reduce

def f(x,y):
return x*y
print (reduce(f,[2,3,5,6]))//会先算2*3在算6*5....

//过滤
import math
def is_sqr(x):
a=int( math.sqrt(x))
return a*a==x
print (list(filter(is_sqr, range(1, 101))))


//排序
import math
a = ['bob', 'about', 'Zoo', 'Credit']
print(sorted(a, key=str.lower))

lambda 匿名函数,冒号前面X表示函数参数
lambda x: x * x=
def f(x)
return x*x
map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])----[1,4,9,16,25,36,49,64,81]

 

Python 属性访问权限

Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。

但是,如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。

以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。

__xxx__:如果一个属性以该形式定义,这种定义被称为特殊属性
_xxx:可以在子类中使用
__xxx:不可以在子类中使用(无法被外部访问)

当实例属性和类属性重名时,实例属性优先级高

 

转载于:https://www.cnblogs.com/Refun-7/p/6279162.html

<think>好的,我现在需要帮助用户理解Python中箭头符号(->)的含义和用途。用户已经提供了几个引用资料,我需要综合这些信息,并结合他们之前的问题来给出准确的回答。 首先,查看用户提供的引用资料。引用1、3、4都提到了Python中的->符号,主要用于函数定义的返回值注解。引用3和4具体说明这是返回值注解,允许元数据附加到函数,描述参数和返回值的类型。引用4还提到可以通过__annotations__属性获取这些注解。 用户之前的问题是关于C/C++中的->运算符,现在转向Python中的->,需要明确两者虽然符号相同,但用途完全不同。在C/C++中,->用于指针访问结构体成员,而Python中的->是类型注解的一部分,用于指示函数返回值的类型。 需要确保回答结构清晰,分点说明,并包含示例代码。根据用户提供的示例,比如def f(...) -> str:,展示如何定义和使用。还要提到__annotations__属性的使用,如引用4所述。 用户可能混淆了不同语言中的符号用法,因此需要强调Python->的特定用途,避免与C/C++的指针操作混淆。同时,引用5提到协程和生成器,但可能与当前问题关联不大,可以暂时忽略,除非用户有进一步的问题。 此外,用户提到了引用2关于>>>符号,但当前问题不涉及,可以忽略。但需要确保回答专注于->符号。 最后,按照用户要求生成相关问题,这些问题应围绕Python的类型注解、与静态类型语言的区别、工具利用注解的方式,以及可能的相关概念如协程(引用5中的内容),但需确保问题相关且合理。 总结回答的结构: 1. 核心定义:->在Python中的用途是返回值类型注解。 2. 语法规范:如何编写,包括参数和返回值的注解。 3. 功能扩展:元数据的作用,工具如mypy的使用。 4. 实际应用示例:代码示例和__annotations__的使用。 5. 与C/C++的区别:明确符号的不同用途。 6. 相关问题:生成相关问题。 需要检查是否有遗漏,比如是否有其他用途或注意事项,但根据引用资料,主要用途是类型注解。确保回答符合用户提供的引用内容,并正确标注引用标记。</think>### Python中箭头符号(->)的全面解析 --- #### **核心定义** 在Python中,**`->`符号** 用于 **函数定义** 中的**返回值类型注解**,属于**类型提示(Type Hints)** 的一部分。其核心作用是为函数返回值添加**类型元数据**,帮助开发者理解代码逻辑,并支持静态类型检查工具(如`mypy`)进行代码验证[^3][^4]。 > **简记公式**:`def func(...) -> type: ...` > 表示函数`func`的返回值类型应为`type`。 --- #### **语法规范** 1. **基本用法** 在函数定义的末尾添加`->`符号并指定返回值类型: ```python def add(a: int, b: int) -> int: return a + b ``` 2. **复杂类型注解** 支持嵌套类型和泛型(需从`typing`模块导入): ```python from typing import List, Tuple def process_data(data: List[str]) -> Tuple[int, float]: # 处理逻辑 return (len(data), 3.14) ``` 3. **特殊场景** - **无返回值函数**:使用`None`标注 ```python def log_message(msg: str) -> None: print(msg) ``` - **动态类型**:使用`Any`(需导入`typing.Any`) ```python from typing import Any def flexible_func() -> Any: return "可以是任意类型" ``` --- #### **功能扩展** 1. **元数据存储** 函数注解信息存储在`__annotations__`属性中: ```python def greet(name: str) -> str: return f"Hello, {name}" print(greet.__annotations__) # 输出:{'return': <class 'str'>, 'name': <class 'str'>} ``` 2. **静态类型检查** 工具如`mypy`可通过注解验证代码类型一致性: ```bash # 示例:检查代码类型错误 mypy your_script.py ``` --- #### **与C/C++的对比** | 语言 | `->` 用途 | 示例 | |--------|---------------------------|------------------------------| | Python | **返回值类型注解** | `def func() -> int: ...` | | C/C++ | **指针访问结构体成员** | `ptr->member = value;` | --- #### **实际应用场景** 1. **代码可读性提升** 明确函数输入/输出的预期类型: ```python def parse_json(data: bytes) -> dict: import json return json.loads(data.decode('utf-8')) ``` 2. **IDE智能提示支持** PyCharm、VSCode等工具可通过注解提供自动补全和错误检测: ```python def calculate(a: float, b: float) -> float: return a ** 2 + b # IDE会提示运算符类型是否兼容 ``` 3. **协作开发规范** 在团队项目中统一类型约定,减少接口误解: ```python class User: def __init__(self, uid: int, name: str) -> None: self.uid = uid self.name = name ``` --- #### **注意事项** 1. **运行时无强制约束** Python解释器**不会**在运行时检查类型注解,需配合工具链使用: ```python def broken_func() -> int: return "字符串" # 能运行,但mypy会报错 ``` 2. **兼容性要求** 类型注解需Python 3.5+版本支持,旧版本需使用注释替代: ```python # Python 3.4及以下 def old_func(a): # type: (int) -> int return a + 1 ``` --- ### 相关问题 1. Python类型提示(Type Hints)与静态类型语言(如Java)的类型声明有何本质区别?[^3][^4] 2. 如何利用`typing`模块实现更复杂的类型约束(如泛型、可选类型)? 3. 类型注解对Python程序性能是否有影响? 4. 如何通过`@overload`装饰器实现函数重载的类型提示?[^3] --- [^1]: Python函数定义中`->`的官方说明 [^3]: Python返回值注解的元数据功能 [^4]: 类型提示与静态检查工具实现原理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值