什么是Python字节串?
我所能找到的只是关于如何编码为bytestring或解码为ascii或的主题utf-8.我试图了解它是如何工作的.在普通的ASCII字符串中,它是一个数组或字符列表,每个字符代表一个0-255的ASCII值,这就是你知道数字代表什么字符的方式.在Unicode中,它是字符的8或16字节表示,告诉您它是什么字符.
那么什么是字节串?Python如何知道哪些字符代表什么?它是如何在引擎盖下工作的?既然你可以打印甚至返回这些字符串,它会显示字符串表示,我不太明白......
好的,所以我的观点肯定会在这里错过.我被告知这是一个不可变的字节序列,没有任何特殊的解释.
一个字节序列..好吧,让我们说一个字节:
'a'.encode()返回b'a'.
很简单.为什么我能看到一个?
说我得到的ASCII值一个,这样做:
printf "%d" "'a"
它返回97.好的,好的,ASCII字符的整数值a.如果我们将97解释为ASCII,比如在C中char,那么我们得到这封信a.很公平.如果我们将字节表示转换为位,我们得到:
01100001
2 ^ 0 + 2 ^ 5 + 2 ^ 6 = 97.凉.
那么为什么要'a'.encode()返回b'a'而不是01100001??
如果它没有特定的解释,它不应该返回类似的东西b'01100001'吗?
它似乎像ASCII一样解释它.
有人提到它调用__repr__了bytestring,所以它以人类可读的形式显示.但是,即使我做了类似的事情:
with open('testbytestring.txt', 'wb') as f:
f.write(b'helloworld') …Run Code Online (Sandbox Code Playgroud) 这个clang ++错误消息是什么意思,为什么我得到它?我似乎无法在互联网上找到任何关于它的东西......
clang: warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior is deprecated
这是我的代码,
MergeSort.h:
#ifndef __MERGESORT_H__
#define __MERGESORT_H__
#include <iostream>
using namespace std;
class MergeSort;
class MergeSort
{
public:
MergeSort();
MergeSort(const int* list, int length);
~MergeSort();
friend ostream& operator<< (ostream& os, const MergeSort& ms);
private:
int* list;
int len;
};
ostream& operator<< (ostream& os, const MergeSort& ms);
#endif
Run Code Online (Sandbox Code Playgroud)
MergeSort.cpp:
#include <iostream>
#include "MergeSort.h"
using namespace std;
MergeSort::MergeSort()
{
list = new …Run Code Online (Sandbox Code Playgroud) 我无法确定如何使用setuptools安装我的软件包,我已经尝试阅读它上面的文档和SO帖子,但我无法让它正常工作.我正在尝试使用一个简单的helloworld应用程序.这是我得到了多远:
helloworld.py:
print("Hello, World!")
Run Code Online (Sandbox Code Playgroud)
README.txt文件:
Hello, World! readme
Run Code Online (Sandbox Code Playgroud)
MANIFEST.in:
recursive-include images *.gif
Run Code Online (Sandbox Code Playgroud)
setup.py:
from setuptools import setup, find_packages
setup(
name='helloworld',
version='0.1',
license='BSD',
author='gyeh',
author_email='hello@world.com',
url='http://www.hello.com',
long_description="README.txt",
packages=find_packages(),
scripts = ['helloworld.py'],
package_data={
"" : ["images/*.gif"]
},
data_files=[('images', ['images/hello.gif'])],
description="Hello World testing setuptools",
)
Run Code Online (Sandbox Code Playgroud)
我有一个名为images/hello.gif的空白文件,我希望将其作为附加数据包含在我的包中.文件夹结构如下所示:
testsetup/
|-- helloworld.py
|-- images/
|-- --- hello.gif
|-- MANIFEST.in
|-- README.txt
|-- setup.py
Run Code Online (Sandbox Code Playgroud)
当我运行时python setup.py sdist,它会生成dist并helloworld.egg-info成功.当我在egg-info下查看SOURCES.txt时,它包含脚本和images文件夹下的图像,而dist下的tarball也包含它们.
但是,当我尝试pip install --user helloworld-0.1.tar.gz在tarball 上运行时,它成功安装了它,但我找不到程序文件helloworld.py和images/hello.gif.
当我查看下面时$HOME/.local/lib/python3.3/site-packages/,我看到egg-info文件夹及其中安装的所有内容.但该$HOME/.local/bin文件夹甚至不存在.程序文件存储在别处吗?我在这做错了什么?我正在运行Arch Linux.
我应该首先提一下,我对Haskell很新.有没有特别的理由let在Haskell中保留表达式?
我知道Haskell摆脱了rec对应于let语句的Y-combinator部分的关键字,表明它是递归的.为什么他们没有let完全摆脱声明呢?
如果他们这样做,陈述在某种程度上似乎会更加迭代.例如,类似于:
let y = 1+2
z = 4+6
in y+z
Run Code Online (Sandbox Code Playgroud)
只会是:
y = 1+2
z = 4+6
y+z
Run Code Online (Sandbox Code Playgroud)
对于熟悉函数式编程的人来说,哪个更易读,更容易阅读.我能想到保持它的唯一原因是这样的:
aaa = let y = 1+2
z = 4+6
in y+z
Run Code Online (Sandbox Code Playgroud)
如果没有这个let,我认为最终会出现模棱两可的语法:
aaa =
y = 1+2
z = 4+6
y+z
Run Code Online (Sandbox Code Playgroud)
但是如果Haskell没有忽略空格,并且代码块/范围与Python类似,它是否能够删除let?
是否有更强的理由留下来let?
对不起,如果这个问题看起来很愚蠢,我只是想了解更多关于它为什么存在的问题.
有什么办法可以使CharField(或TextField)不接受空字符串?我正在尝试使用,blank=False但无法正常工作...
class Foo(models.Model):
title = models.CharField(max_length=124, blank=False)
Run Code Online (Sandbox Code Playgroud)
然后,在syncdb运行之后python manage.py shell,我可以输入:
f = Foo()
f.save()
Run Code Online (Sandbox Code Playgroud)
而且没有抱怨。该对象具有带值的标题''。我不希望这种情况发生,如果Foo()没有明确给定非空字符串,我希望它抱怨。有什么办法吗?
我正在使用Django 1.6
有没有办法在Haskell中从左到右构建列表而不使用++?
cons是一个恒定的时间操作,我想保持代码有效.我觉得有一种普遍的方式来利用Haskell的懒惰来做这样的事情,但我想不到它.
现在我正在编写一个创建Collatz序列的函数,但它正在以错误的方向构建列表:
module CollatzSequence where
collatz :: (Integral a) => a -> [a] -> [a];
collatz n l
| n <= 0 = error "Enter a starting number > 0"
collatz n [] = collatz n [n]
collatz n l@(x:_)
| x == 1 = l
| even x = collatz n ((div x 2):l)
| otherwise = collatz n ((x*3 + 1):l)
Run Code Online (Sandbox Code Playgroud)
在GHCi中:
*CollatzSequence> collatz 13 []
[1,2,4,8,16,5,10,20,40,13]
Run Code Online (Sandbox Code Playgroud) 如何设置vim来包装文本而不插入换行符?
基本上:
我可以通过以下方式获得一些此行为:
:set textwidth=80
:set wrap
Run Code Online (Sandbox Code Playgroud)
除此之外将插入换行符,我不希望它插入换行符.我已经尝试了这个,但它不起作用.
我正在尝试写出一些lambda演算,但我不能让教会条件工作.我应该说我是Haskell noob.
我已经在网上和SO上看过解决方案,但它们都涉及引入新类型和其他技巧,但我希望尽可能接近原始语法.例如:
tru :: Integer -> Integer -> Integer
tru = \x -> \y -> x
fals :: Integer -> Integer -> Integer
fals = \x -> \y -> y
main = do
print (tru 2 3)
print (fals 5 6)
Run Code Online (Sandbox Code Playgroud)
匹配教堂布尔的确切语法:
\a.\b.a
\a.\b.b
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以匹配教堂if/else的确切语法?我正在尝试复制\p.\a.\b.p a b,但我不确定我做错了什么:
ifelse :: Integer -> Integer -> Integer -> Integer -> Integer -> Integer
ifelse = \p -> \a -> \b -> p -> a -> b
main = do
print …Run Code Online (Sandbox Code Playgroud) 对于monad来说,有什么像部分升降机吗?我需要类型签名是这样的:
Monad m => (a1 -> r) -> a1 -> m r
Run Code Online (Sandbox Code Playgroud)
而不是这个:
Monad m => (a1 -> r) -> m a1 -> m r
Run Code Online (Sandbox Code Playgroud)
用于>=>和其他原因.我正在寻找上述做法的规范方式.